日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】Float计算不准确

發布時間:2024/4/13 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】Float计算不准确 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家可能都遇到過,float在計算某些值時,會有不準確的情況。

比如如下情況:

?

> 計算不準確

package com.nicchagil.study.java.demo.No10float計算.No01不準確的舉例;public class Call {public static void main(String[] args) {System.out.println(0.08f + 0.01f);}}

?

打印:

0.089999996

?

> 用BigDecimal代替計算

如果需要準確計算float,一種方法就是用BigDecimal來進行計算,看以下工具類:

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>當不整除,出現無限循環小數時,向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數結果為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方法進行除法時就會拋異常的,異常如下:* 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;}}

?

總結

以上是生活随笔為你收集整理的【Java】Float计算不准确的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。