【Java】Float计算不准确
生活随笔
收集整理的這篇文章主要介紹了
【Java】Float计算不准确
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
大家可能都遇到過,float在計算某些值時,會有不準(zhǔn)確的情況。
比如如下情況:
?
> 計算不準(zhǔn)確
package com.nicchagil.study.java.demo.No10float計算.No01不準(zhǔn)確的舉例;public class Call {public static void main(String[] args) {System.out.println(0.08f + 0.01f);}}?
打印:
0.089999996?
> 用BigDecimal代替計算
如果需要準(zhǔn)確計算float,一種方法就是用BigDecimal來進(jìn)行計算,看以下工具類:
import java.math.BigDecimal;public class FloatCalculator {/*** <p>add</p>* @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;}/*** <p>subtract</p>* @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;}/*** <p>multiply</p>* @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;}/*** <p>divide</p>* <p>當(dāng)不整除,出現(xiàn)無限循環(huán)小數(shù)時,向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數(shù)結(jié)果為1.6</p>* @param a* @param b* @return*/public static float divide(float a, float b) {return divide(a, b, 2, BigDecimal.ROUND_HALF_UP);}/*** <p>divide</p>* @param a* @param b* @param scale* @param roundingMode* @return*/public static float divide(float a, float b, int scale, int roundingMode) {/** 通過BigDecimal的divide方法進(jìn)行除法時就會拋異常的,異常如下:* java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(Unknown Source)* 解決之道:就是給divide設(shè)置精確的小數(shù)點divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)* BigDecimal.ROUND_HALF_UP : 向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數(shù)結(jié)果為1.6*/BigDecimal b1 = new BigDecimal(a + "");BigDecimal b2 = new BigDecimal(b + "");float f = b1.divide(b2, scale, roundingMode).floatValue();return f;}}?
總結(jié)
以上是生活随笔為你收集整理的【Java】Float计算不准确的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: appium for mac 安装与
- 下一篇: git clone的源码在vim打开时是