解決java中丟失精度問題

2021-08-30 13:46:50 字數 758 閱讀 5870

在電商專案中遇到的問題,正常的float、double資料進行運算會出現精度丟失問題,在涉及貨幣計算時會出現嚴重後果。

**:

system.out.println(0.03+0.0101);

system.out.println(1.0-0.52);

system.out.println(4.235*1000);

system.out.println(13.3/100);

結果:

0.0401

0.48

4235.0

0.133

解決的方式是使用bigdecimal的string建構函式。之所以要使用string建構函式是因為double型別的建構函式同樣存在這個問題,這是由於jdk中double型別運算造成不確定的痼疾。

下面是用bigdecimal寫的乙個工具類解決這個問題 :

public class bigdecimalutil 

public static bigdecimal add(double v1,double v2)

public static bigdecimal sub(double v1,double v2)

public static bigdecimal mul(double v1,double v2)

public static bigdecimal div(double v1,double v2)

}

cJSON精度丟失問題

問題復現步驟 1 輸入字串 2 字串轉成cjson物件 3 呼叫cjson print將cjson物件再轉成字串 4 再將字串轉成cjson物件 5 保留8位精度方式呼叫printf列印值,輸出變成 0.123456 問題的原因出在cjson的print number函式 static char p...

js tofixed精度丟失問題

tofixed 方法可把 number 四捨五入為指定小數字數的數字。例如將資料num保留2位小數,則表示為 tofixed num 但是其四捨五入的規則與數學中的規則不同,使用的是銀行家捨入規則,銀行家捨入 所謂銀行家捨入法,其實質是一種四捨六入五取偶 又稱四捨六入五留雙 法。具體規則如下 簡單來...

PHP 解決INT型別轉換 精度丟失問題

公司專案在新增商品的時候當商品 輸入為19.9的時候,錄入到資料庫就變為19.89了 這裡需要把元轉換為分,直接乘以100就可以,但是又使用了轉化整數型別的函式 int 或者 intval 結果都會少1 可以看出原本結果應該是1840的,但是使用了函式intval 和 int 之後結果居然變為了16...