如何从浮点数中得到精确的小数部分作为整数?

前端之家收集整理的这篇文章主要介绍了如何从浮点数中得到精确的小数部分作为整数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
十进制和&有很多问题和答案.从浮点数中提取整数并获取某些特定小数点的输出.但没有人能解决我的问题.如果有人能帮助我解决我的问题,请

我实际上是试图从浮点数中提取精确的小数部分.我试过这个:

float f=254.73;

    int integer = (int)f;
    float fractional = f-integer;

    printf ("The fractional part is: %f",fractional);

输出为:0.729996.出于这个原因,当我这样做时:

float f=254.73;

    int integer = (int)f;
    float fractional = f-integer;
    int fractional_part_in_integer = ((int)(f*100)%100);

    printf ("The value is: %d",fractional_part_in_integer);

它给了我72作为输出.但是,我想从给定的数字254.73中精确地提取73.我已经知道如何在printf()函数中使用%.2f来打印最多两个十进制数字.但在我的代码中,我现在不想打印这个数字.我有一些计算,其中小数部分为整数形式,即73.所以,我的问题是如何从254.73中提取小数部分,以便我可以得到精确的73作为整数来进行更多的计算?

希望,我能让每个人都理解.

解决方法

最简单的方法是使用来自< math.h>的标准库函数ceil.
浮点数254.73可能会转换为254.7299957275390625000000.
f-integer将给出0.7299957275390625000000.
现在将它乘以100并使用ceil函数获得不小于72.99957275390625000000的最小整数值.
int fractional_part_in_integer = ((int)ceil(fractional*100)) % 100;

更新:正如comment@Sneftel所指出的,本答案中的上述建议方法不能始终如一.

一个简单的hack是使用math.h中的round函数来舍入f然后提取小数部分

float f=254.73;

int int_part = (int)f;
float fractional = round(f*100)/100 - int_part;
int fractional_part_in_integer = (int)(fractional*100);

printf("%d,%d\n ",int_part,fractional_part_in_integer);

输出

254,73
原文链接:https://www.f2er.com/c/116701.html

猜你在找的C&C++相关文章