我有一个非常大的浮点数(大约20位),我想检查它是否是整数。例如,如果我有一个像154.0的数字那么它是一个整数,而154.123123不是一个整数。
我需要检查非常大的浮点数(20位或更多),这意味着我不能先将其转换为long long数据类型,看看它们是否相同。请把我推向正确的方向。我只会欣赏C / C ++中的答案。谢谢! :)
答案 0 :(得分:16)
嗯,什么是“巨大的”?如果数字在某种意义上是巨大的,即位数大于浮点数的尾数可表示的数字,则浮点数总是整数。
例如,IEEE 754双精度格式具有52位尾数,足以容纳约16个十进制数字。如果你的数字有20个十进制数字,那么任何将这些数字压缩到double
的尝试都会导致舍入,从而有效地将你的数字变为“整数”。
您提到您的数字太大而无法容纳long long
数据类型。如果您指的是64位long long
数据类型,那么它会自动表示您的数字太大,以至于当用典型的double
类型表示时它们将永远不会有任何小数部分,即它们将始终如果用double
值表示,则为“整数”。
P.S。您是否正在使用具有超宽尾数的异常浮点类型?
答案 1 :(得分:1)
只测试x == floor(x)
?