如何检查一个巨大的浮点数是否为整数?

时间:2011-04-17 08:22:15

标签: c++ c floating-point type-conversion

我有一个非常大的浮点数(大约20位),我想检查它是否是整数。例如,如果我有一个像154.0的数字那么它是一个整数,而154.123123不是一个整数。

我需要检查非常大的浮点数(20位或更多),这意味着我不能先将其转换为long long数据类型,看看它们是否相同。请把我推向正确的方向。我只会欣赏C / C ++中的答案。谢谢! :)

2 个答案:

答案 0 :(得分:16)

嗯,什么是“巨大的”?如果数字在某种意义上是巨大的,即位数大于浮点数的尾数可表示的数字,则浮点数总是整数。

例如,IEEE 754双精度格式具有52位尾数,足以容纳约16个十进制数字。如果你的数字有20个十进制数字,那么任何将这些数字压缩到double的尝试都会导致舍入,从而有效地将你的数字变为“整数”。

您提到您的数字太大而无法容纳long long数据类型。如果您指的是64位long long数据类型,那么它会自动表示您的数字太大,以至于当用典型的double类型表示时它们将永远不会有任何小数部分,即它们将始终如果用double值表示,则为“整数”。

P.S。您是否正在使用具有超宽尾数的异常浮点类型?

答案 1 :(得分:1)

只测试x == floor(x)