double乘法失去精度,double保留小數問題

2021-10-08 10:58:57 字數 1100 閱讀 6470

情景:首先相除,然後×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...