Tag: 浮点

Ruby Float#round方法表现不正确圆(2)

我了解到建议使用BigDecimal而不是Float ,但这个要么是bug,要么突出了Float的深奥本质。 似乎Float#round(2)有“1.015”,“1.025”和“1.035”的问题。 1.015.round(2) => 1.01 # => WRONG .. should be 1.02 1.025.round(2) => 1.02 # => WRONG .. should be 1.03 1.035.round(2) => 1.03 # => WRONG .. should be 1.04 1.045.round(2) => 1.05 # => CORRECT 1.016.round(2) => 1.02 # => CORRECT round(3)工作正常。 1.0015.round(3) => 1.002 # => CORRECT 1.235.round(2) => 1.24 […]

为什么6.84 – 3.6 == 3.2399999999999998

我刚刚遇到这个并且无法弄清楚Ruby为什么会这样做。 有人可以解释为什么在Ruby: 6.84 – 3.6 == 3.2399999999999998 而不仅仅是3.24? 我知道它与那些数字的二进制表示有关 (Decimal(‘6.84’) – Decimal(‘3.6’)) 会返回预期的结果。 我只是对Float行为的详细解释感到好奇。

ruby算术

为什么这个代码7.30 – 7.20在ruby中返回0.0999999999999996 ,而不是0.10 ? 但是,如果我写7.30 – 7.16 ,例如,一切都会好的,我会得到0.14 。 问题是什么,我该如何解决?

为什么我的BigDecimal对象初始化时出现意外的舍入错误?

在Ruby 2.2.0中,为什么: BigDecimal.new(34.13985572755337, 9) 等于34.0但是 BigDecimal.new(34.13985572755338, 9) 等于34.1398557 ? 请注意,我在64位计算机上运行它。

为什么浮点数打印得如此不同?

众所周知,(大多数)浮点数不能精确存储(使用IEEE-754格式时)。 所以不应该这样做: 0.3 – 0.2 === 0.1; // very wrong …因为它会导致false ,除非使用了一些特定的任意精度类型/类( Java / Ruby中的 BigDecimal,PHP中的BCMath ,Perl中的Math :: BigInt / Math :: BigFloat ,仅举几例) 。 但我想知道为什么当一个人尝试打印这个表达式的结果时, 0.3 – 0.2 ,脚本语言( Perl和PHP )给出0.1 ,但“虚拟机”( Java , JavaScript和Erlang )给出的更类似于0.09999999999999998 ? 为什么它在Ruby中也不一致? 版本1.8.6( codepad)给出0.1 , 版本1.9.3(ideone)给出0.0999…