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請求引數為中文時亂碼分析
- yapi 如何獲得: 當前時間和 n 天后的時間作為引數進行請求API
- laraval 從資料庫讀取出來的是物件,很麻煩,轉化為陣列,個人認為最佳方案資料庫物件陣列
- 函式作為引數傳遞函式
- WebApi 中請求的 JSON 資料欄位作為 POST 引數傳入WebAPIJSON
- laravel中whereIn方法中使用SQL作為引數的途徑LaravelSQL
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- subprocess中命令為引數序列和字串的區別字串
- 在 URL 中使用另一個 url 作為引數時會被`&`截斷的問題
- Python之在函式中使用列表作為預設引數Python函式
- 使用Datomic實現沒有麻煩的事件溯源事件
- 將使用回撥函式作為引數的函式改造為返回 Promise 的一個具體例子函式Promise
- 從一道題來看看golang中的slice作為引數時的現象Golang
- 為什麼自媒體賬號管理那麼麻煩?使用工具可以讓你技巧提升
- 使用rebase避免公共分支出現不必要的提交記錄
- GO語言————6.7 將函式作為引數Go函式
- 利用DataTable將其作為引數傳給SP
- 教你在銀行遇到麻煩時如何整銀行
- 使用mysql直接匯出資料為txt或csv時使用-q引數MySql
- Laravel同時接收路由引數和查詢字串中的引數Laravel路由字串
- 使用 C# 9 的records作為強型別ID - 路由和查詢引數C#型別路由
- 為什麼大多數公司最好避免使用微服務? -GreekDataGuy微服務
- 一個比較麻煩的限流需求
- js中在將字串數字轉為數字時,使用哪種方式更安全JS字串
- 自建資料庫太麻煩?華為雲資料庫GaussDB既省心又省力資料庫
- Go中slice作為引數傳遞的一些“坑”Go
- Oracle:SYS_REFCURSOR作為函式中的輸出引數Oracle函式
- Golang 切片作為函式引數傳遞的陷阱與解答Golang函式
- 設計模式——把類作為引數的抽象工廠模式設計模式抽象
- Go語言Slice作為函式引數詳解Go函式
- js使用字串為什麼會出現雙引號?JS字串
- Spring中@InitBinder將請求引數轉換為各自的型別Spring型別
- 加了強型別如何將請求引數轉為整型型別
- scala:函式作為值或引數進行傳遞、作為返回值進行返回函式
- 阿里巴巴為什麼建議使用BigDecimal進行浮點數運算阿里Decimal
- Python將字串轉為字典最佳實踐Python字串
- 可變資料型別不能作為python函式的引數資料型別Python函式
- HTML高亮關鍵字真麻煩HTML