2017-01-10 124 views
0

今天我注意到IronPython2.7以下問題:(鐵)Python的格式與模運算符和「負零」的問題

格式化像這樣一個FORMAT_STRING,我得到一個「零是負面的」。如果我使用Python2.7或Python3.4而不是IronPython,我會得到相同的結果。

>>> "%.2f" % -0.004 
'-0.00' 

然後我意識到,我可以通過傳遞兩個參數格式字符串像這樣擺脫是負面的零:

>>> "%s%.2f" % ('x', -0.004) 
'x0.00' 

「X」是一個隨機字符。所以,我在float值和minus值消失之前格式化另一個字符串。但這並不適用於Python2.7和Python3.4,但我得到:

>>> "%s%.2f" % ('x', -0.004) 
'x-0.00' 

有沒有人知道這裏發生了什麼?

格式化「negativ zero」的目的是什麼?

+0

聽起來像IronPython中的錯誤。它應該儘可能遵循CPython參考實現。 –

+0

我不知道你是否知道,但負零是一個完全有效的浮點值:'-0.0'。它不同於(但等於)正零。不知道爲什麼IronPython使得負號消失,格式字符串中有另一個值。 – Blckknght

回答

0

(編輯考慮到@MarkDikinson評論)

你可以先格式化數字,然後該幹嘛printf式的格式:

"%.2f" % (round(-0.004, 2)+0) 

+0有去除負零標誌。

round也可以乘坐ndigits參數,指定如何 多少位需要數本身(不談論顯示,這是由"%.2f"處理)的舍入。

+1

爲什麼使用NumPy的'around'而不是Python的內置'round'函數? (你可能想要舍入到2位小數......) –

+0

@MarkDickinson你是對的!我一直在工作中使用numpy,但也有一個標準的輪也:) – mguijarr

+1

@mguijarr安裝numpy for ironpython可能有問題 – Odomontois