我想在rails中获得十进制数的一小部分。例如,我有一个数字,“1.23”,我想得到“23”这可能太容易但是,有没有人知道我该怎么办?
答案 0 :(得分:49)
尝试使用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
答案 1 :(得分:9)
我不确定这是否是最简单的方法 - 但您可以使用“。”简单地分割数字。人物 - 像这样:
number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
答案 2 :(得分:8)
n = 1.23
n.modulo(1)
=> 0.22999999999999998
n - n.to_i
=> 0.22999999999999998
答案 3 :(得分:4)
确定正确的解决方案需要了解您正在使用的类型。如果您的值是Float(Ruby中非整数的标准类型),则mod(1)
之类的逻辑正确答案可能会因floating point errors而产生意外结果。对于Float是首先使用的正确数据类型的任何情况,这都是可以接受的。
如果浮点错误不可接受,请不要使用Float
! Ruby提供了很棒的BigDecimal
类,它以性能为代价而且更加冗长,语法更加精确。
decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
答案 4 :(得分:3)
如果您知道所需的精度,那么to_s解决方案可能会更快一些。
1.1234.modulo(1).round(4) #0.1234
答案 5 :(得分:1)
a=1.23 #value of a will be 1.23
a=a-a.to_i #value of a will be 0.23
答案 6 :(得分:0)
尝试了所有内容后......我觉得最好的答案是(num - num.to_i).abs
,因为它也适用于负数。
e.g。
(1.23 - 1.23.to_i).abs = 0.23
( - 1.23 - -1.23.to_i).abs = 0.23
答案 7 :(得分:0)
...“ 1.23”,我想输入“ 23”。
只需除去整数部分并乘以100。
((number - number.to_i) * 100).to_i
答案 8 :(得分:0)
我们可以通过多种方法来实现输出modulo
是其中的一种
1.23.modulo(1) => 0.22999999999999998
您可以根据需要四舍五入结果
但要实现您所提出的问题
我将采用一种非常简单的方法
value = 1.23.to_s.split('.') -> ["1", "23"]
value.last.to_i -> "23"