得到十进制数的小数部分
我试图在rails中获得十进制数的一小部分。 例如,我有一个数字,“1.23”,我想得到“23”这可能太容易但是,有没有人知道我该怎么办?
我不确定这是否是最简单的方法 – 但您可以使用“。”简单地拆分数字。 字符 – 像这样:
number = 1.23 parts = number.to_s.split(".") result = parts.count > 1 ? parts[1].to_s : 0
尝试使用modulo方法:
1.23.modulo(1) => 0.23
在这里阅读更多内容: http : //www.ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo
或者您可以将float转换为整数并从原始浮点值中减去它。
1.23 - 1.23.to_i => 0.23
n = 1.23 n.modulo(1) => 0.22999999999999998 n - n.to_i => 0.22999999999999998
推荐阅读http://floating-point-gui.de/
确定正确的解决方案需要了解您正在使用的类型。 如果您的值是Float(Ruby中非整数的标准类型),那么逻辑上正确的答案(如mod(1)
可能会因浮点错误而产生意外结果。 对于Float是首先使用的正确数据类型的任何情况,这可能是可以接受的。
如果不接受浮点错误,请不要使用Float
! Ruby提供了出色的BigDecimal
类,它以性能为代价和更冗长的语法更准确。
decimal = BigDecimal.new("1.23") decimal.frac #=> 0.23
如果你知道你想要的精度,这对于to_s解决方案来说可能会更快一些。
1.1234.modulo(1).round(4) #0.1234
a=1.23 #value of a will be 1.23 a=aa.to_i #value of a will be 0.23
尝试了一切之后…我觉得最好的答案是(num - num.to_i).abs
因为它也适用于负数。
例如
(1.23 – 1.23.to_i).abs = 0.23
(-1.23 – -1.23.to_i).abs = 0.23
……“1.23”我希望得到“23”。
只需删除整数部分并乘以100即可。
((number - number.to_i) * 100).to_i