new BigDecimal時,請使用字串作為引數為最佳,避免不必要的麻煩
一、構造BigDecimal
BigDecimal提供了豐富的建構函式,可以通過int、long、double、String等來構造一個BigDecimal物件。
但是,使用double作為引數的建構函式,無法精確構造一個BigDecimal物件,需要自己指定一個上下文的環境,也就是指定精確位。
例如:
BigDecimal bg = new BigDecimal(1.1);
System.out.println(bg.toString());
執行結果:
1.100000000000000088817841970012523233890533447265625
所以,通常情況下,我們會使用String物件作為引數來構造一個精確的BigDecimal物件。
下面提供的三種方法都是可以的:
//方法一
BigDecimal bg1 = new BigDecimal("1.1");
//方法二
BigDecimal bg2 = new BigDecimal(Double.toString(1.1));
//方法三
BigDecimal bg3 = BigDecimal.valueOf(1.1);
System.out.println(bg1.toString());
System.out.println(bg2.toString());
System.out.println(bg3.toString());
執行結果:
1.1
1.1
1.1
附:
BigDecimal.value(double val)方法為什麼可以呢?
看看下面的原始碼,大家應該就清楚了:
public static BigDecimal valueOf(double val) {
return new BigDecimal(Double.toString(val));
}
二、生產中遇到的問題
1、資料庫出現型別轉換錯誤
回想起來,情景歷歷在目,資料庫中定義的是decimal型別,模型定義的是BigDecial,照理來說肯定不會錯,但是,神奇的事情發生,在更新decimal型別的欄位時,竟然出現了varchar轉化為decimal的型別轉換錯誤。
排查了好久,最後發現是建立BigDecimal時,使用的是BigDecimal(float)這個建構函式,快取String型別的建構函式就沒問題了。
2、頁面顯示無限小數
這個跟上面那個類似,也是在建立BigDecimal物件時,使用的是float型別的引數,導致頁面上顯示的是無限小數,換成String型別的建構函式就可以了。
轉載自:https://blog.csdn.net/u011983531/article/details/67637757
相關文章
- 寫最少的程式碼,避免給自己找麻煩
- 寫最少的程式碼 避免給自己找麻煩
- GET請求引數為中文時亂碼分析
- laraval 從資料庫讀取出來的是物件,很麻煩,轉化為陣列,個人認為最佳方案資料庫物件陣列
- java的new真的給我們帶來了麻煩嗎?Java
- yapi 如何獲得: 當前時間和 n 天后的時間作為引數進行請求API
- 把物件作為引數(轉)物件
- 函式作為引數傳遞函式
- golang 方法作為引數傳遞Golang
- JavaScript 數字作為字串拼接起來JavaScript字串
- Java String作為引數的情況Java
- laravel中whereIn方法中使用SQL作為引數的途徑LaravelSQL
- 為設定密碼的電腦省去輸入密碼的麻煩!密碼
- 修改使用者密碼引來的一系列麻煩密碼
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- 批量去水印技術原理(以我的衣櫥為例,給老趙找找麻煩)
- jmeter 如何將上一個請求的結果作為下一個請求的引數——使用正則提取器JMeter
- JavaScript replace()第二個引數為函式時的引數JavaScript函式
- CORBA的麻煩事... (轉)ORB
- subprocess中命令為引數序列和字串的區別字串
- WebApi 中請求的 JSON 資料欄位作為 POST 引數傳入WebAPIJSON
- 避免不必要的排序(二)排序
- 避免不必要的排序(一)排序
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標
- Python之在函式中使用列表作為預設引數Python函式
- mybatis list作為引數 foreach迴圈MyBatis
- 物件,函式作為一個函式的引數物件函式
- C#的Replace函式,使用函式作為的引數需要注意C#函式
- 5、避免建立不必要的物件物件
- 從一道題來看看golang中的slice作為引數時的現象Golang
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- 將使用回撥函式作為引數的函式改造為返回 Promise 的一個具體例子函式Promise
- GO語言————6.7 將函式作為引數Go函式
- Cursor 作為引數傳遞並返回結果
- 使用Datomic實現沒有麻煩的事件溯源事件
- 為什麼自媒體賬號管理那麼麻煩?使用工具可以讓你技巧提升
- javascript陣列可以使用字串作為索引JavaScript陣列字串索引
- 麻煩各位高手幫忙