通過以下操作,我將記憶體百分比轉換為以 MB 為單位的記憶體。百分比記憶體是相對于4096 MB記憶體計算的。首先讓發言權80%的4096 MB需要存盤器=>
4096*.8 = 3,276.8 ~ rounded to 3,276 MB due to integer operation
現在這個 3276 MB 的值存盤在存盤中。
現在下次當我3276 MB從存盤中獲取這個值并再次將其轉換為記憶體百分比時,79%由于以下計算和整數四舍五入,我得到記憶體百分比
3276*100/4096 = 79.98046875 ~ rounded to 79 % due to integer operation
所以這個比例不匹配如80%要79%由于整數四舍五入。
如何通過正確的整數舍入來避免在我的 java 程式中發生這種不匹配?這個問題有一些通用的解決方案嗎?
uj5u.com熱心網友回復:
無論您采用哪種方式舍入都會遇到類似問題,改變舍入策略只會改變導致這些問題的情況。一旦你失去了那個精度,你就再也找不回來了。如果您希望兩個數字都是持久的,請保存兩個數字。
uj5u.com熱心網友回復:
tl;博士
new BigDecimal( "4096" )
.multiply( new BigDecimal( "0.8" ) )
.setScale( 0 , RoundingMode.HALF_EVEN )
.intValueExact()
3277
四舍五入 BigDecimal
指定舍入模式使用BigDecimal。
BigDecimal eightyPercent = new BigDecimal( "0.8" ) ;
BigDecimal bd = new BigDecimal( "4096" ).multiply( eightyPercent ) ;
BigDecimal rounded = bd.setScale( 0 , RoundingMode.HALF_EVEN ) ; // Bankers rounding.
int result = rounded.intValueExact() ; // Throws exception if not fitting into an `int` with no data loss.
System.out.println( eightyPercent ) ;
System.out.println( bd ) ;
System.out.println( rounded ) ;
System.out.println( result ) ;
查看此代碼在 IdeOne.com 上實時運行。
你得到你想要的結果3277。
0.8
3276.8
3277
3277
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/338737.html
上一篇:飛鏢中的乘法表
