float計算不準確的替代方法
做報表的時候,有時候會遇到float的運算,偶爾會發生計算值不準確的情況。《Effective Java》中提到,float用於工程計算的運算。
如果需要準確計算float,一種方法就是用BigDecimal來進行計算,以下是一些工具方法。
import java.math.BigDecimal;
public class FloatCalculator {
/**
*
add
* @param a * @param b * @return */ public static float add(float a, float b) { BigDecimal b1 = new BigDecimal(a + ""); BigDecimal b2 = new BigDecimal(b + ""); float f = b1.add(b2).floatValue(); return f; } /** *subtract
* @param a * @param b * @return */ public static float subtract(float a, float b) { BigDecimal b1 = new BigDecimal(a + ""); BigDecimal b2 = new BigDecimal(b + ""); float f = b1.subtract(b2).floatValue(); return f; } /** *multiply
* @param a * @param b * @return */ public static float multiply(float a, float b) { BigDecimal b1 = new BigDecimal(a + ""); BigDecimal b2 = new BigDecimal(b + ""); float f = b1.multiply(b2).floatValue(); return f; } /** *divide
*當不整除,出現無限迴圈小數時,向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數結果為1.6
* @param a * @param b * @return */ public static float divide(float a, float b) { return divide(a, b, 2, BigDecimal.ROUND_HALF_UP); } /** *divide
* @param a * @param b * @param scale * @param roundingMode * @return */ public static float divide(float a, float b, int scale, int roundingMode) { /* * 通過BigDecimal的divide方法進行除法時就會拋異常的,異常如下: * java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source) * 解決之道:就是給divide設定精確的小數點divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN) * BigDecimal.ROUND_HALF_UP : 向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數結果為1.6 */ BigDecimal b1 = new BigDecimal(a + ""); BigDecimal b2 = new BigDecimal(b + ""); float f = b1.divide(b2, scale, roundingMode).floatValue(); return f; } }相關文章
- iOS --NSDecimalNumber 處理計算精度不準確問題iOSDecimal
- 絕密公式算單雙準確率99最強計劃方法公式
- setInterval()不準確原因分析
- ls命令統計檔案數量不準確
- c++ float 計算時注意點C++
- Win10系統時間不準確的解決方法 Win10系統時間不準怎麼辦?Win10
- Es資料彙總不準確的問題
- 實驗設計(DOE)的正確使用方法,拿走不謝!
- float線上轉二進位制計算器
- 導致代理IP驗證不準確的四種原因
- Java深海拾遺系列(5)--- 精度計算中的BigDecimal,double和floatJavaDecimal
- singleLine=“true“的替代方法
- MySQL並行複製延時時間不準確MySql並行
- ETL過程中資料精度不準確問題
- 迄今最準確方法誕生!AI預測過早死亡風險,準確率高達76%AI
- 淺談月出月落和月相的計算方法以及替代工具 - 月出月落和月相 APIAPI
- 二進位制轉float浮點數線上計算工具
- MySQL如何計算重要的指標,來確定配置是否正確MySql指標
- 開發函式計算的正確姿勢 —— 依賴安裝方法一覽函式
- YouGov:2/5的英國社交網民看到過不準確的內容Go
- 雲端計算還有多久能夠替代高效能運算?
- 程式設計師計算私活薪資的正確方式程式設計師
- 過擬合詳解:監督學習中不準確的「常識」
- 判斷方案絕密公式算單雙準確率99公式
- word公式怎麼計算 word公式計算的方法公式
- 當“不確定性”成為新常態,雲端計算帶來的遠不止降本增效
- ORACLE analyse table方式收集表統計資訊導致SQL執行計劃不準確而效能下降OracleSQL
- 替代laravel whereHas方法Laravel
- 不確定估計學習小結
- Mybatis plus 一對多關聯查詢分頁不準確的問題MyBatis
- Apache Flink,流計算?不僅僅是流計算!Apache
- {q}絕密公式算單雙準確率99(最穩技巧)公式
- js精確計算浮點數相加JS
- 關於PHP精確計算模組PHP
- 【計算機組成原理】第6章 計算機的運算方法計算機
- Kubernetes 如何成為計算資源的標準
- win10系統下計算器丟失不見了的解決方法Win10
- Python做浮點數(float)運算要小心Python
- 陣列結構 list () 的替代方法陣列