十进制和&有很多问题和答案.从浮点数中提取整数并获取某些特定小数点的输出.但没有人能解决我的问题.如果有人能帮助我解决我的问题,请
我实际上是试图从浮点数中提取精确的小数部分.我试过这个:
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的最小整数值.
浮点数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