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 
# ...