Ruby round()是对一些数字进行舍入,而不是对其他数字进行舍入
我想保留两个小数点。我有这样的数字:Ruby round()是对一些数字进行舍入,而不是对其他数字进行舍入,ruby,floating-point,Ruby,Floating Point,我想保留两个小数点。我有这样的数字: 9.96999.to_f.round(2) 大多数情况下,它们被四舍五入到两个小数点(9.97),但偶尔我会得到一个类似于: 9.96999999999 你知道为什么吗 编辑 我正在从一个刮表中添加两个值。查看表格,发生这种情况的唯一时间是当单元格1的值为9.02且单元格2的值为0.95,或者当单元格1的值为9.87且单元格2的值为0.1时。这两次我都应该得到9.97。相反,我得到的正是9.96999999999。所有初始值都以字符串开头。这可能是系统处
9.96999.to_f.round(2)
大多数情况下,它们被四舍五入到两个小数点(9.97
),但偶尔我会得到一个类似于:
9.96999999999
你知道为什么吗
编辑
我正在从一个刮表中添加两个值。查看表格,发生这种情况的唯一时间是当单元格1的值为
9.02
且单元格2的值为0.95
,或者当单元格1的值为9.87
且单元格2的值为0.1
时。这两次我都应该得到9.97
。相反,我得到的正是9.96999999999
。所有初始值都以字符串开头。这可能是系统处理浮点的方式,而不是Ruby。举个例子,在IRB中试试这个
10 - 8.2 - 1.8 #=> don't expect zero here
10 - (8.2 - 1.8) #=> same as above with a different result
不要使用.to_f.round()
使用以下命令:
A.圆形(2)->整数
将A舍入到最接近的整数。(就这么简单)浮点值本质上是不精确的。许多精确的小数没有精确的表示法。即使如此,如果您根据计算结果而不是输入来执行,您的回合将运行得更好 最有可能的情况是,您根本不想要圆形,而只是想要控制演示,在这种情况下,使用或
看来您对浮点表示法和算术有一些基本的误解。我建议你在遇到麻烦之前仔细阅读一下。从这里开始:我尝试了1000次,每次都得到了
9.97
:请给出两种情况的清晰示例。ie:代码和值,其中一个值被四舍五入到小数点后2位,但相同的代码和不同的值却不能。只需编辑更多细节。而不是单独四舍五入,只需将总和四舍五入即可<代码>(9.87+0.1)。第(2)轮@HungryCoder,有效。但是,我刚刚注意到,当字符串开始时类似于8
,而第二个单元格没有值时,我会以8.0
结束。是否要在浮动时强制第二个0
?对于第一个,我得到6.661338147750939e-16
。对于第二个,我得到了3.600000000000005
。不过我需要两个小数位。然后将所有内容乘以100,或者使用一个数字。根据定义,浮点数是不精确的。
pry(main)> f = (9.02 + 0.95)
=> 9.969999999999999
pry(main)> '%.2f' % f
=> "9.97"
pry(main)> 9.02.round(2) + 0.95.round(2)
=> 9.969999999999999
pry(main)> f.round(2)
=> 9.97