double和float进行小数计算精度不够

1、float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal

2、注意:double 和float转换为字符串类型造成进度丢失;直接用字符串表示double 和float

3、案例:

package com.zhangwl.pg1113;

import org.junit.Test;

import java.math.BigDecimal;

/** * @ClassName RunMain * @Description 演示小案例 * @Author zhangwl * @Date 2019/11/13 23:02 * @Version 1.0 **/public class RunMain {

    @Test    public void test_01() {        BigDecimal douDecMax = new BigDecimal(2.0);        BigDecimal douDecMin = new BigDecimal(1.10);        System.out.println("douDecMax - douDecMin = " + douDecMax.subtract(douDecMin));

        System.out.println("********************分界线*************************");

        BigDecimal strDecMax = new BigDecimal("2.0");        BigDecimal strDecMin = new BigDecimal("1.10");        System.out.println("strDecMax - strDecMin = " + strDecMax.subtract(strDecMin));        System.out.println();    }}

运行结果:

douDecMax - douDecMin = 0.899999999999999911182158029987476766109466552734375
********************分界线*************************
strDecMax - strDecMin = 0.90

原文地址:https://www.cnblogs.com/sico/p/11854056.html

时间: 2024-10-02 03:50:28

double和float进行小数计算精度不够的相关文章

java用double和float进行小数计算精度不准确

java用double和float进行小数计算精度不准确 大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中或者已知的小数计算得到的结果会不准确,这种问题是非常严重的. <Effective Java>中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类可以解决上述问题,java的设计者给编程人员提供了一个很有用的类BigDecim

js 浮点小数计算精度问题 parseFloat 精度问题

在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题var price = 10.99;var quantity = 7;var needPay = parseFloat(price * quantity); needPay的正确结果应该是76.93元  但是运行后发现needPay为76.93000000000001 此情况可通过 toFixed(n)  方法修正 但是这个方法对 js版本要求较高 不能兼容ie5 另一个解决方案是: 将元为单位的金额乘以100换算为分进

修复小数计算精度不准确方法

Number.prototype.mul = function (arg) { var m = 0, s1 = this.toString(), s2 = arg.toString(); try { m += s1.split('.')[1].length } catch (e) { } try { m += s2.split('.')[1].length // m是累加结果 } catch (e) { } return Number(s1.replace('.', '')) * Number(

java double 保留两位小数

java保留两位小数问题: 方式一: 四舍五入  double   f   =   111231.5585;  BigDecimal   b   =   new   BigDecimal(f);  double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  保留两位小数  ---------------------------------------------------------------   方

BigDecimal 小数 浮点数 精度 财务计算

最常用法示例 构造方法 //测试构造方法 System.out.println("double类型的1.22:" + new BigDecimal(1.22));//1.2199999999999999733546474089962430298328399658203125 System.out.println("String类型的1.22: " + new BigDecimal("1.22"));//1.22 System.out.printl

Java double和 float丢失精度问题

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt357 由于对float或double 的使用不当,可能会出现精度丢失的问题.问题大概情况可以通过如下代码理解: public class FloatDoubleTest { public static void main(String[] args) { float f = 20014999; double d = f; double d2 = 20014999; Syst

Java中如何解决double和float精度不准的问题

我们知道浮点数是无法在计算机中准确表示的,例如0.1在计算机中只是表示成了一个近似值,因此,对付点数的运算时结果具有不可预知性. 在进行数字运算时,如果有double或float类型的浮点数参与计算,偶尔会出现计算不准确的情况.如以下示例代码: package ex; public class BigDeciTest { public static void main(String[] args){ System.out.println(0.05+0.01); System.out.printl

(Jquery)避免数据相加小数点后产生多位数和计算精度损失

/** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var baseNum, baseNum1, baseNum2; try { baseNum1 = num1.toString().split(".")[1].length; } catch (e) { baseNum1 = 0; } try { baseNum2 = num2.toString

js 小数计算失去精度

原因:小数计算会转化为二进制 精度丢失 举个例子:4.02*10的N次方 怎么算都是错的; 常见问题 0.1+0.2 !=0.3 ... 处理:转化为小数进行计算 //加法 function addNum (a,b){  var c,d,e; try {       c = a.toString().split(".")[1].length; } catch (f) {       c = 0; }   try {       d = b.toString().split("