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

十进制和&有很多问题和答案.从浮点数中提取整数并获取某些特定小数点的输出.但没有人能解决我的问题.如果有人能帮助我解决我的问题,请

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

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...