得到十进制数的小数部分

我试图在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