-1
0.1 + 0.2 == 0.3 ==> False

我在 python、c#、c++、F#、Visual Basic.NET、ASP.NET 中试过这个!

0.1 + 0.2 == 0.30000000000000004 ==> True

这适用于我上面提到的所有语言。为什么会发生这种不合逻辑的不平等?

4

4 回答 4

5

Python 有一个十进制库,可以让你将它评估为真(同时也解释了为什么它是假的),事实上,它们使用几乎相同的例子:http ://docs.python.org/ 2/库/decimal.html

精确性延续到算术上。在十进制浮点中,0.1 + 0.1 + 0.1 - 0.3 正好等于零

还与“每个计算机科学家应该了解的浮点知识”相关,这是一篇多年前写的开创性文章,今天仍然正确:http ://www.fer.unizg.hr/_download/repository/paper%5B1%5D.pdf

于 2013-10-17T03:06:38.417 回答
4

您可能想阅读一下: http: //docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html(每个计算机科学家都应该知道的关于浮点运算的知识)

简短的回答是,在二进制中,0.1 是一个重复分数,它在 1/8 和 1/16 之间的“某处”,因此没有 0.1(或 0.2)的“位精确”表示。在比较浮点值时,您始终必须在 epsilon 值内这样做,以防止此类问题。

于 2013-10-17T03:08:40.227 回答
3

从 Python 文档中阅读此内容;它几乎一字不差地适用于所有语言:

http://docs.python.org/2/tutorial/floatingpoint.html

于 2013-10-17T03:04:27.510 回答
2

要比较浮点数,请使用以下模式:

Math.Abs(NumberToCompare1 - NumberToCompare2) < 0.01

其中 0.01 是 Epsilon,即运算的精度。

于 2013-10-17T03:08:24.933 回答