0

我有以下号码含有数字与3个小数和保持尾随零(红宝石)数组排序

numbers = [70.920, -38.797, 14.354, 99.323, 90.374, 7.581] 

我想将它们数字数组排序,但问题是红宝石尾随自动舍入数零。我想保留格式为小数点后三位,尾随零可以忽略。

当我声明numbers数组时,我得到这个输出。

=> [70.92, -38.797, 14.353, 99.323, 90.374, 7.581] 

我试图将数组映射到包含3个小数位然后将它们转换回浮点数。

number.map { |n| "%.3f" % n }.map(&:to_f).sort 

再次,Ruby修剪尾部零。

[-38.797, 7.581, 14.354, 70.92, 90.374, 99.323] 

我期待的输入,像这样

[-38.797, 7.581, 14.354, 70.920, 90.374, 99.323] 
我用浮动文档作为参考

,但无法弄清楚如何实现这一

http://ruby-doc.org/core-2.2.0/Float.html

这是可能的Ruby?提前致谢。

回答

1

您是否将输入表示与尾随零仅用于可视化目的?您可以使用该数组作为红宝石使用它,删除尾随零。并且,当您需要提供输入时,请使用类似的内容:

numbers.sort.map{|n|sprintf "%.3f", n} 
4

不可以。您只能要求Ruby将数字格式化为字符串,而不是默认情况下改变其显示方式。也就是说,将Ruby解释浮点数在许多方面,但它选择将如何显示它们:

0x01.to_f # => 1.0 
1_000e-3 # => 1.0 
1.000 # => 1.0 
1e0 # => 1.0 
1.0 # => 1.0 

因此,你必须依赖于字符串表示的格式:

numbers.sort.map { |n| "%.3f" % n } 
# => ["-38.797", "7.581", "14.354", "70.920", "90.374", "99.323"] 

中当然,如果你打印的话,字符串和浮点之间的区别通常是不相关的:

puts numbers.sort.map {|n| "%.3f" % n} 
# -38.797 
# 7.581 
# 14.354 
# 70.920 
# ...