Kri*_* MP 0 ruby math ruby-on-rails decimal
我目前正在转换一些python统计资料库,需要产生具有高十进制精度的数字。例如,我这样做:
i = 1
n = 151
sum = (i - 3/8) / (n + 1/4)
Run Code Online (Sandbox Code Playgroud)
结果将为0。
我的问题是,当我进行这种计算时,如何始终自动显示小数精度?
我想要的输出是: 0.004132231404958678
在ruby中,所有算术运算都产生与操作数相同类型的值(精度更高的值)。
也就是说,3/4是一个整数除法,结果为0。
为了使示例正常工作,您将确保在任何地方都不会失去精度:
i = 1.0
n = 151.0
sum = (i - 3.0/8) / (n + 1/4.0)
Run Code Online (Sandbox Code Playgroud)
请注意,与大多数(如果不是全部)语言一样,它Float受到污染:
0.1 + 0.2 #? 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
如果需要一个精确值,可以使用BigDecimal或Rational。