2011-11-14 71 views
0

我知道很多的語言有舍入到一個特定小數位數,如使用Python的能力:舍入數到特定分辨率

>>> print round (123.123, 1) 
    123.1 
>>> print round (123.123, -1) 
    120.0 

但是我們如何四捨五入到這是一個任意分辨率不是的十進制倍數。例如,如果我想圓一個數目到最近的一半或三分之一,因此:

123.123 rounded to nearest half is 123.0. 
456.456 rounded to nearest half is 456.5. 
789.789 rounded to nearest half is 790.0. 

123.123 rounded to nearest third is 123.0. 
456.456 rounded to nearest third is 456.333333333. 
789.789 rounded to nearest third is 789.666666667. 
+0

這個問題已經被問很多次了。爲什麼你的代表用戶會寫一個全新的問題並提供你自己的答案? – Alnitak

+0

@Alnitak,如果你可以找到一個愚蠢的話,那麼_標記就是這樣,這就是標記的目的。我無法找到一個,並且爲了響應類似的Python特定版本(舍入到四分之一),我提出了適用於任何解決方案的解決方案。我的理由是:增加好問題的答案,因爲危險類型的問題和答案被認爲是正確的,只要他們有效。而且這不是我尋找代表,我已經達到了每日上限:-) – paxdiablo

+0

請參閱326476和7423023 - 問題不是語言不可知的,但答案通常是 – Alnitak

回答

7

您可以輪通過簡單的縮放數量,這是一個由分辨率來劃分乘以數量的任意分辨率(或者更容易,只是按照決議進行劃分)。

然後,在將其縮小回來之前,將它四捨五入到最接近的整數。

在Python(這也是一個很好的僞代碼語言),這將是:

def roundPartial (value, resolution): 
    return round (value/resolution) * resolution 

print "Rounding to halves" 
print roundPartial (123.123, 0.5) 
print roundPartial (456.456, 0.5) 
print roundPartial (789.789, 0.5) 

print "Rounding to thirds" 
print roundPartial (123.123, 1.0/3) 
print roundPartial (456.456, 1.0/3) 
print roundPartial (789.789, 1.0/3) 

print "Rounding to tens" 
print roundPartial (123.123, 10) 
print roundPartial (456.456, 10) 
print roundPartial (789.789, 10) 

print "Rounding to hundreds" 
print roundPartial (123.123, 100) 
print roundPartial (456.456, 100) 
print roundPartial (789.789, 100) 

在上面的代碼,它是roundPartial函數提供的功能,它應該是很容易用round函數將它翻譯成任何程序語言。

它的其餘部分,基本上是一個測試工具,輸出:

Rounding to halves 
123.0 
456.5 
790.0 
Rounding to thirds 
123.0 
456.333333333 
789.666666667 
Rounding to tens 
120.0 
460.0 
790.0 
Rounding to hundreds 
100.0 
500.0 
800.0