2015-01-12 101 views
0

比方說,我有如何爲圓形()函數的小數

float_number = 3.05321355"

我想限制我的結果後得到位置的確切人數只有5個字符(之後我將其轉換爲一個字符串)。所以結果將會是從左邊算起的5個字符(包括小數點),並且這將是小數點後我想添加到round()函數的位置。

5 float_number的字符版本:

float_number_5_char = 3.053

是小數點後小數位,這樣就是我想湊足。

round(float_number, 3)

是否有一個算法或方法我可以找出任何浮點的小數位的數量爲5個字符最多?

又如:

float_1 = 32.53235 
float_1_5_char = 32.53 

因此,這是小數點後小數位。

float_2 = 0.53235 
float_2_5_char = 0.532 

因此,這是後點小數位。

我試圖想出這樣的事情:

round_place = len(str(value)) - len(str(value)[:5]) 

但是,這並不適用於所有浮點數工作。

編輯:該功能的前提條件是該值從0-999.99

+1

@PadraicCunningham,不會做四捨五入。 –

+1

'123456789.0'四捨五入到5個地方會是什麼? – dawg

+0

對不起,我應該補充一點。該功能的前提條件是該值爲0-999.99 – Naz

回答

4

對於正數,你可以得到的位數到小數點左邊有一個簡單的公式:

left = int(math.log10(x))+1 if x >= 10 else 1 

現在你可以回合:

r = round(x, n - 1 - left) 
+1

該死的......擊敗我10秒。這是正確的解決方案。有一個upvote。 :) –

+0

是不是我限制的字符數? (例如5) – Naz

+1

@nhbjgfcxhgchg太糟糕了,你沒有注意到我的錯誤。我現在修好了。 –

2

浮點數永遠不會有確切的位數。如果你需要輸出精度只使用字符串在格式化爲正確的字符數:

five_chars = lambda num: ("%.3f" if num<1 else "%.5g") % num 
float1 = five_chars(32.53235) 
float2 = five_chars(0.53235) 

給出:

32.53 
0.532