情景:首先相除,然後×100 ;
/**
* 小數點後保留四位位小數
*/string result = string.
format
("%.4f"
,(dividend / total));
double r = double.
valueof
(result)
;
//接上面的**
double result = r *
100;
這是double可能會丟失精度,比如
0.3060
->
30.59999999····
我的解決方案
//第一種 也可能丟失精度
double result = r*10*
10;//第二種 直接先x100 然後保留兩位小數
string result = string.
format
("%.2f"
,(dividend*
100/ total)
);
bigdecimal b =
newbigdecimal
(string.
valueof
(0.14))
; bigdecimal c =
newbigdecimal
(string.
valueof
(100))
; system.out.
println
(b.multiply
(c))
; system.out.
println
(b.multiply
(c).
intvalue()
);system.out.
println
(b.multiply
(c).
doublevalue()
);
double精度問題
double 相乘向上取整 param params return public static int upscore double d1,double d2 bigdecimal.setscale 方法用於格式化小數點 setscale 1 表示保留一位小數,預設用四捨五入方式 setscale ...
double精度丟失
include includeint main 輸出 124 include includeint main 輸出 125 include includeint main 輸出 125 include includeint main 輸出 1 輸出均正確 include includeint mai...
float和double 精度分析
結論 1.範圍 float和double的範圍是由指數的位數來決定的。float的指數字有8位,而double的指數字有11位,分布如下 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 於是,floa...