我想圓一個數字,以小數點後7位,但我注意到,Math.Round不與一些數字正常工作:C#Math.Round錯誤?
Math.Round(39.248779999999996,3) => 39.249
Math.Round(39.248779999999996,4) => 39.2488
Math.Round(39.248779999999996,5) => 39.248779999999996
Math.Round(39.248779999999996,6) => 39.248779999999996
Math.Round(39.248779999999996,7) => 39.248779999999996
任何人都可以解釋我這種行爲?
這些浮點值。它們不具有任意數字的有限二進制表示。如果您想要精確的表示形式,請將其轉換爲「decimal」類型。 –
問題是我必須將一個double傳遞給外部組件,以至於我無法更改它的方法簽名,並且如果該數字有超過7個小數位,該組件將拋出一個錯誤。有沒有辦法將這個雙數有效地舍入到小數點後7位? – smeegoan
嗯,沒有辦法讓一個double來存儲一個四捨五入的值,這樣就不會有效。外部組件是越野車。雙打沒有固定的小數位數。它應該使用小數類型。 –