我正在做一個程序,由於不需要解釋的原因,需要一個浮點數轉換成一個字符串來計算len()。但是,str(float(x))導致x在被轉換爲一個字符串時被四捨五入,從而拋出整個事情。有誰知道它的修復? 這裏,如果你想知道所使用的代碼:浮動轉換爲一個字符串,而不捨入它
len(str(float(x)/3))
我正在做一個程序,由於不需要解釋的原因,需要一個浮點數轉換成一個字符串來計算len()。但是,str(float(x))導致x在被轉換爲一個字符串時被四捨五入,從而拋出整個事情。有誰知道它的修復? 這裏,如果你想知道所使用的代碼:浮動轉換爲一個字符串,而不捨入它
len(str(float(x)/3))
舍入的一些形式浮點數打交道時常常是不可避免的。這是因爲您可以精確地以10爲底數表示的數字不能總是以2爲底(您的計算機使用的)來表示。
例如:
>>> .1
0.10000000000000001
在這種情況下,你使用repr
看到0.1轉換爲字符串:
>>> repr(.1)
'0.10000000000000001'
我相信蟒蛇砍掉最後的幾個數字當您使用str()爲了解決這個問題,但這是一個部分的解決方法,並不能代替理解正在發生的事情。
>>> str(.1)
'0.1'
我不確定到底是什麼問題導致你「四捨五入」。也許你會更好地使用字符串格式來更精確地控制輸出?
例如
>>> '%.5f' % .1
'0.10000'
>>> '%.5f' % .12345678
'0.12346'
len(repr(float(x)/3))
但是我必須說,這並不像你想象的那麼可靠。
浮動數據以十進制數字形式輸入/顯示,但您的計算機(實際上是您的標準C庫)將它們存儲爲二進制數據。您可以從這種轉變得到一些副作用:
>>> print len(repr(0.1))
19
>>> print repr(0.1)
0.10000000000000001
上之所以出現這種情況的解釋是在Python教程this chapter。
的溶液是使用特異性跟蹤十進制數,像python的decimal.Decimal
類型:
>>> print len(str(decimal.Decimal('0.1')))
3
十進制+1。 – 2009-08-23 10:43:40
關於如何使用除法浮點結果的好帖子:https://stackoverflow.com/questions/2958684/python-division – Trutane 2017-09-01 23:17:27
其他答案已經指出,浮點數的表示是一個棘手的問題,至少可以說。
既然你不給你的問題夠背景下,我不知道如果小數點模塊能夠滿足您的需求是有用的:
http://docs.python.org/library/decimal.html
在其他的東西,你可以明確地指定精度你希望獲得(從文檔):
>>> getcontext().prec = 6
>>> Decimal('3.0')
Decimal('3.0')
>>> Decimal('3.1415926535')
Decimal('3.1415926535')
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85987')
>>> getcontext().rounding = ROUND_UP
>>> Decimal('3.1415926535') + Decimal('2.7182818285')
Decimal('5.85988')
一個簡單的例子從我的提示(蟒蛇2。6):
>>> import decimal
>>> a = decimal.Decimal('10.000000001')
>>> a
Decimal('10.000000001')
>>> print a
10.000000001
>>> b = decimal.Decimal('10.00000000000000000000000000900000002')
>>> print b
10.00000000000000000000000000900000002
>>> print str(b)
10.00000000000000000000000000900000002
>>> len(str(b/decimal.Decimal('3.0')))
29
也許這可以幫到您? 十進制是自2.4以來的python stdlib,並在python 2.6中添加。
希望這有助於 弗朗切斯科
如果x原本海峽,爲何投? – 2009-08-23 02:11:14
-1:沒有示例爲'x'的不同值所需的輸出。沒有例子,我們只能猜測問題是什麼。 – 2009-08-23 12:31:37