尝试在PHP和C#中划分相同的数字时得到不同的结果:
PHP:
echo 1000/0.03475;
output:28776.9784173
C#:
1000/0.03475
output:28776,9784172662
为什么呢?以及如何获得相同的结果?
答案 0 :(得分:4)
但它们确实给出了相同的结果,只是在显示时四舍五入到不同的小数位数。如果你要查看代表内存中浮点数的实际位,它们应该是相同的(给定相同的架构)。
答案 1 :(得分:1)
其他答案所说的可能是你有不同价值的原因(更准确地说,显示中的不同舍入)。
然而,在PHP中,一个浮点作为相同的语义C double
(它通常有64位)具有(另外,PHP目标C89,而only C99 defined floating point arithmetic so that it complies with IEEE 754):
C89标准甚至不需要IEEE格式,对于C99,完全IEEE 754支持(Inf,NaN,非正规)是可选的。
在C#中,float
为32-bit wide,并且保证(大部分)符合IEEE 754标准。与PHP的浮点最接近的是C#double
。
答案 2 :(得分:0)
因为这就是他们的表现方式。
printf("%.10f\n", 1000 / 0.03475);
答案 3 :(得分:0)
有两种可能性,正如其他人所说:要么它们是相同的浮点值,要么只是打印不同,或者它们是不同的浮点值。要查看它们是否相同,您需要打印所有十进制数字 - 如果您的语言允许(C#和PHP不 - 请参阅我的文章http://www.exploringbinary.com/print-precision-of-dyadic-fractions-varies-by-language/)。
它们可能是不同的浮点值,因为并非所有编译器/解释器/运行时库都将每个十进制字符串转换为正确的浮点数(在您的示例中,我特别谈到0.03475部分)。有关详细信息,请参阅我的文章http://www.exploringbinary.com/incorrectly-rounded-conversions-in-visual-c-plus-plus/。