BigDecimal 在資金計算時正確使用姿勢
1. BigDecimal可以接受數字和String型別,為保證精確性應使用String型別
當我們用double型別的資料作為引數時,構造出的BigDecimal 物件value1並不能保證資料的準確性。 而用String作為引數時構造物件時,資料的準確性是有保證的。
public void constructTest(){
BigDecimal value1 =new BigDecimal(10.511);
System.out.println("value1: " + value1);
BigDecimal value2 = new BigDecimal("10.511");
System.out.println("value2: " + value2);
}
result:
value1: 10.510999999999999232613845379091799259185791015625
value2: 10.511
2.BigDecimal 不可變性
BigDecimal 和String 一樣具有物件不可變行,一旦賦值就不會再變
BigDecimal 和String 一樣具有物件不可變行,一旦賦值就不會再變。
public void immutableTest() {
BigDecimal count = new BigDecimal("1.3");
count.add( new BigDecimal("9.2"));
System.out.println("count:" + count);
}
count:1.3
執行程式碼會發現count不是預期的10.5,還是初始的賦值1.3
3.計算錢有關的 bean屬性都宣告為BigDecimal
BigDecimal money = new BigDecimal(455099051455.97);
BigDecimal invest = new BigDecimal(444198102911.940);
BigDecimal investMoneys =money.subtract(invest);
System.out.println("老方法1:"+investMoneys.setScale(0, BigDecimal.ROUND_DOWN));
System.out.println("老方法:"+investMoneys.intValue());
老方法1:10900948544
老方法:-1983953344
第一個算的是對的,第二個算的是錯
要取整的時候用setScale(0,BigDecimal.ROUND_DOWD)保留零位小數,後邊的都舍掉
相關文章
- Postman 正確使用姿勢Postman
- Redis的正確使用姿勢Redis
- 在Windows下使用vim grep的正確姿勢Windows
- 計算網路頻寬需求的正確姿勢
- 開發函式計算的正確姿勢 —— 排查超時問題函式
- Java日誌正確使用姿勢Java
- laravel 使用 es 的正確姿勢Laravel
- 使用快取的正確姿勢快取
- 在 Laravel Mix 裡使用 Vux 2 的正確姿勢LaravelUX
- 開發函式計算的正確姿勢 —— 爬蟲函式爬蟲
- 原始碼|使用FutureTask的正確姿勢原始碼
- 中國菜刀使用(實戰正確姿勢)
- npm run dev 的正確使用姿勢NPMdev
- 使用 Java 8 Optional 的正確姿勢Java
- 在vscode使用editorconfig的正確姿勢VSCode
- 在Vue中使用JSX的正確姿勢(有福利)VueJS
- 使用Aliplayer在微信中播放視訊的正確姿勢
- 開發函式計算的正確姿勢——OCR 服務函式
- Spring Boot使用AOP的正確姿勢Spring Boot
- 使用 react Context API 的正確姿勢ReactContextAPI
- 模組開發者使用 ES Modules 的正確姿勢
- Python re 庫的正確使用姿勢Python
- Fragment全解析(2):正確的使用姿勢Fragment
- 開發函式計算的正確姿勢——使用 brotli 壓縮大檔案函式
- 在 JavaScript 中建立陣列的正確姿勢JavaScript陣列
- 開發函式計算的正確姿勢——使用互動模式安裝依賴函式模式
- 開發函式計算的正確姿勢——執行 Selenium Java函式Java
- GIT使用rebase和merge的正確姿勢Git
- Swift中使用Contains的正確姿勢SwiftAI
- Flexbox 佈局的正確使用姿勢Flex
- Laravel 消費佇列的正確使用姿勢Laravel佇列
- [小卓筆記]:使用Storyboard的正確姿勢筆記
- Android 執行緒的正確使用姿勢Android執行緒
- TCP三次握手的正確使用姿勢TCP
- [Angular]在Angular中和DOM打交道的正確姿勢Angular
- mysqljs在koa2中的正確姿勢MySqlJS
- git commit 的正確姿勢GitMIT
- 玩轉 Ceph 的正確姿勢