這是我用來計算百分比並將其舍入到小數點後兩位的代碼。然而,此刻,結果出來是45.0%,而非45.33%爲什麼我會得到這個精度錯誤?
int one = 432;
int rolls = 953;
double test1 = 100 * one/rolls;
double finalValue1 = Math.round(test1 * 100.0)/100.0;
爲什麼沒有小數位顯示?
這是我用來計算百分比並將其舍入到小數點後兩位的代碼。然而,此刻,結果出來是45.0%,而非45.33%爲什麼我會得到這個精度錯誤?
int one = 432;
int rolls = 953;
double test1 = 100 * one/rolls;
double finalValue1 = Math.round(test1 * 100.0)/100.0;
爲什麼沒有小數位顯示?
您可以使用String.format(「%。2f」,test1)。如果你使用round,那麼java會圍繞整數值。因此,以這種方式格式化會給你你所尋求的答案。
因爲你是乘以整數測試1的結果是整數
所以你不得不說
double test1= 100.0*one/rolls;
或
double test1=(double)100*one/rolls
問題是與以下行:
double test1 = 100 * one/rolls;
也就是說因爲100
,one
和rolls
類型爲int
。
當你做100 * one
,那將導致43200
。然後,我們必須執行其餘的計算... 43200/953
實際上等於45.330535152
,但是因爲這些都是int
類型,結果將是45
。製作test1 = 45
。由於測試之一是雙倍的,它實際上是45.0
。
由於上述原因,下一個使用test1
的計算將會關閉,從而導致「無十進制值」。
要解決此問題,您可以將one
和rolls
的類型更改爲雙倍。
你有兩個的問題。
首先,要執行整數除法
double test1 = 100 * one/rolls;
100
,one
和rolls
都是int
。這意味着結果是一個整數,而不管你聲明返回類型是什麼。這包括在SO問題Why the result of 1/3=0 in java?中:
結果變量爲double只會導致除法後發生隱式轉換。
如果你想double
S,用雙打:
double one = 432.0;
double rolls = 953.0;
固定,在你的Math.round(test1 * 100.0)/100.0;
分工會產生double
後,但可能與精度超過兩個地方。目前還不清楚在這一點上,如果你想進一步舍入到特定精度,但如果你只是想在小數點後打印的兩個數字,你可以使用:
System.out.printf("%.2f", finalValue1);
https://stackoverflow.com/questions/2538787/ how-to-display-an-float-data-with-2-decimal-places-in-java – awksp
沒有小數點的原因是因爲我相當肯定Java會打印最少的數字小數表示'double'。在這種情況下,45.00 = 45.0,所以Java將跳過額外的小數位並打印後者。 – awksp
昨天,**完全相同的問題**被問到。本週是什麼時間「在Java任務中小數點後兩位」? –