簡而言之,我想知道爲什麼下面的ToString()行不符合我的期望。需要幫助瞭解C#浮點字符串格式化
float actual = 111253.469F;
double rounded = Math.Round(actual, 2); // 111253.47 (expected)
string stringified = actual.ToString(); // 111253.50 (expected 111253.469)
string currency = actual.ToString("C"); // $111253.50 (expected 111253.47 or possibly .46)
有人可以解釋發生了什麼嗎?
注意: 我不認爲浮點值是準確的,每浮點數的其他問題。不過,我確實希望字符串輸出反映所討論的浮點數的字符串值。
在這種情況下,如果我設置了一個斷點並在快速查看中查看'actual'的值,它不會顯示'111253.5',它會顯示'111253.469'。我不明白爲什麼打印時不會這樣。特別是在貨幣情況下,我期望它將四捨五入到適當的小數點,然後顯示,而不是選擇其他字面值。這不是一個數學問題,它是一個ToString()行爲問題。
編輯: 每Quantic的評論下面,它出現在ToString
使用G
格式默認情況下,限制數量7顯著位,導致這裏被看到的數量。
不可能。 111253將永遠不會給出11253作爲輸出 –
@ThomasWeller對不起,我的評論線不準確(不包括第一個1),但它是扔給我的小數部分,對不起。我會糾正的。 – SWC
如果你想要小數點上的兩個數字,你可以使用下面的例子:ToString(「0.00」); ToString(「n2」); //代碼爲 ToString(「c2」); //對於貨幣 – tdog