【发布时间】:2015-12-18 17:48:13
【问题描述】:
我试图从浮点数中提取精确的小数部分。我试过这个:
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 作为整数来进行更多计算?
【问题讨论】:
-
浮点数不能表示为您希望它们大部分时间的精确值。你的结果是合理的。一个可能很有趣的实验是打印
f的值,它可能只接近你的想法(虽然我自己并不累,所以我不确定)。更新:我试过了:ideone.com/9fbeme -
谢谢。但是,我希望应该有一种方法可以在那里用 73 进行一些其他计算。更新:是的,我已经这样做了,并得到了你在实验中发现的价值。
-
由于您的硬件不能准确地表示 254.73,您将不得不找到一些其他硬件,或者使用基于整数的计算来代替(例如使用
25473并稍后除以 100 )。 -
如果您的意思是“如何获得 .73”,如果您的硬件无法代表它,您将永远无法获得准确的值。但是,您可以将原始值(以及您使用的所有其他值)乘以 100,在此级别使用它们(表示正好是您需要的值的 100 倍),然后除以 100 以获得您的确切的结果(仍然受限于您的硬件可以表示的内容)。
-
@RakibulIslam 既然我理解了你试图更好地解决的问题,我认为你最好的选择是按照 user3121023 建议的方式拆分 string 数据在他的回答中。这将为您提供两个整数值,254 和 73,然后您可以按照您似乎已经在做的方式处理它们。只需将“部分美元”值处理为整数(您希望在 0 到 99 之间)而不是浮点值。
标签: c floating-point