爲什麼可以正確排序string.to_float值的數組,但是當'% .3f'%string.to_float或者包括sprintf,Kernel.format在內的任何變體都可以使用?浮點值的字符串數組可以正確地對負數進行排序,但使用sprintf,kernel.format等可以正確排序相同的值
我該如何解決這個問題?
我目前的工作,讓你包含寫滿數字行的文本文件(例)是一個挑戰:
1.123 -3.010 3.999 -2.199 -1.212 2.190 4.121 0.000
我的目標是對這些數字進行排序並將它們打印到控制檯上。
我的第一個嘗試是首先將這些行分割爲各自的字符串編號,然後使用.to_f將它們轉換爲浮點值,最後對它們進行排序並將它們連接在一起(空格分隔)。
這看起來是這樣的:
line.chomp.split(" ").map { |e| e.to_f }.sort!.join(" ")
這很好工作,直到我意識到,在精確小數點後三位結束任何數字,如68.060會失去最後爲零。因此顯示爲68.06而不是68.060,這使解決方案失效。
我繞到果然發現大量引用於:
Kernel.format('%.3f', num)
和
sprintf '%.3f' % num
這是完美的,他們解決了這個問題。我申請它們的方式(試圖改變,但是他們都做同樣的事情):
line.chomp.split(" ").map { |e| sprintf '%.3f', e }.sort!.join(" ")
然後我發現自己在看另一個問題雖然。每一行,這是看跌的控制檯現在組織了負數,好像他們是正數,所以不是:
-3.010 -2.199 -1.212 0.000 1.123 2.190 3.999 4.121
在控制檯上,我看到:
-1.212 -2.199 -3.010 0.000 1.123 2.19 3.999 4.121
這一次我找不到畝選擇。這可能是我的錯,因爲我不知道如何放在谷歌上,但我的搜索沒有發現任何相關的內容。
我希望不要有使用兩個地圖完成它!謝謝! – santanaG 2014-10-09 13:36:06