对包含 3 位小数并保留尾随零的数组进行排序 (Ruby)

Sorting arrays containing numbers with 3 decimals and keeping trailing zeroes (Ruby)

我有一个包含以下数字的数组

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

我想按数字对它们进行排序,但问题是 ruby 自动用尾随零对数字进行舍入。我想将格式保留为小数点后三位,并忽略尾随零。

当我声明 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]

我使用了 Float 文档作为参考,但不知道如何实现它

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

这在 Ruby 中可行吗?提前致谢。

您是否仅出于可视化目的使用带有尾随零的输入表示?您可以像 ruby 那样使用数组,删除尾随零。当您需要显示输入时,使用类似:

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

没有。您只能要求 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
# ...