首页 > 其他分享 >解决double类型计算时丢失精度问题

解决double类型计算时丢失精度问题

时间:2024-10-11 17:01:26浏览次数:7  
标签:BigDecimal double v1 v2 v3 丢失 new 精度

问题:double类型在进行计算时可能会丢失精度

double v1 = 0.2;
double v2 = 0.3;
double v3 = v2 - v1;

预期:v3=0.1

实际:v3=0.09999999999999998

解决:用BigDecimal类型包装一下数据然后计算(需要先把数据转为String类型!)

不转为String类型:

double v1 = 0.2;
double v2 = 0.3;
double v3 = v2 - v1;
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
double b3 = b2.subtract(b1).doubleValue();

b3=0.09999999999999998

正确方式:

double v1 = 0.2;
double v2 = 0.3;
double v3 = v2 - v1;
BigDecimal s1 = new BigDecimal(String.valueOf(v1));
BigDecimal s2 = new BigDecimal(String.valueOf(v2));
double s3 = s2.subtract(s1).doubleValue();

代码示例:

    public static void main(String[] args) {
        double v1 = 0.2;
        double v2 = 0.3;
        double v3 = v2 - v1;
        System.out.println("v3:" + v3);
        System.out.println("-------------");
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        double b3 = b2.subtract(b1).doubleValue();
        System.out.println("b3:" + b3);
        System.out.println("-------------");
        BigDecimal s1 = new BigDecimal(String.valueOf(v1));
        BigDecimal s2 = new BigDecimal(String.valueOf(v2));
        double s3 = s2.subtract(s1).doubleValue();
        System.out.println("s3:" + s3);
    }
v3:0.09999999999999998
-------------
b3:0.09999999999999998
-------------
s3:0.1

 

标签:BigDecimal,double,v1,v2,v3,丢失,new,精度
From: https://www.cnblogs.com/Bernard94/p/18458872

相关文章

  • Vmware挂载san存储_vSphere 6.x 共享存储LUN丢失分区表修复(精华)
    Vmware挂载san存储_vSphere6.x共享存储LUN丢失分区表修复炎炎夏夜客户机房空调意外故障,前端ESXI物理服务器由于温度过高都自保关机,存储和SAN没有自保关机。上班修复空调后,检查存储,检查SAN无异常。开始开机ESXI主机,开机完后发现存储映射的两个LUN全部消失,重启存储,重启ESXI都无......
  • 深入探讨JavaScript中的精度问题:原理与解决方案
    深入探讨JavaScript中的精度问题:原理与解决方案在日常的JavaScript开发中,我们经常会遇到一些令人困惑的数值计算问题,特别是涉及到小数点运算时。例如,为什么0.1+0.2的结果不是预期的0.3,而是0.30000000000000004?本文将详细介绍JavaScript中出现精度问题的原因,深入解析十进......
  • Windows11系统madrid.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个madrid.dll文件(挑选合适的版本文件)把它放......
  • Windows11系统LxssManager.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个LxssManager.dll文件(挑选合适的版本文件)把......
  • 【FPGA开发】Modelsim仿真精度的坑
    问题所在    最近在使用黑金的AXU3EG板卡对着正点原子ZYNQ7020的例程进行移植学习。但在编写tb代码以及使用modelsim进行仿真时出了问题,发现我的实际波形与正点的对不上,仔细测量一下波形发现,我的系统时钟是6ns周期,而不是理想中的5ns周期,这才想到,正点的板子用的是50M......
  • msvcp110丢失怎么解决?三种方法教你修复msvcp110.dll丢失
    1.msvcp110.dll概述1.1定义与作用msvcp110.dll是MicrosoftVisualC++2012RedistributablePackage的一部分,它是一个动态链接库(DLL)文件,对运行时环境至关重要。这个文件包含了C++标准库的实现,为基于VisualC++2012编译的应用程序提供了必要的运行时支持。msvcp1......
  • 基于STM32的高精度数字测量仪设计
    引言本项目设计了一个基于STM32的高精度数字测量仪,能够精确测量电压、电流、温度以及其他环境参数。通过采用高分辨率的ADC(模数转换器)和温度传感器等外设,该系统可以实时获取精确的数据,广泛应用于实验室测量、工业监控以及精密电子设备的调试。用户通过OLED显示屏查看测量结......
  • d3drm.dll文件丢失修复指南:恢复游戏和软件正常运行
    d3drm.dll是DirectX3DRetainedMode(Direct3D保留模式)的一部分,这种模式在较旧的DirectX版本中使用。如果你遇到这个DLL文件缺失的问题,可以尝试以下几种方法来解决:重新安装或更新DirectX修复工具:访问微软官方网站下载并安装最新的DirectX修复工具。如果你运行的是较老的游......
  • 《QQ阅读》小说下载提示DLL文件丢失:修复步骤详解
    当QQ阅读或其他软件提示丢失DLL文件时,通常意味着某个动态链接库文件缺失或损坏,这可能会影响到软件的正常运行。以下是一些解决这个问题的方法:重新启动电脑有时候简单的重启可以解决问题,因为系统可能会自动修复一些临时性的问题。更新或重新安装QQ阅读确保你的QQ阅读是最新......
  • Safari浏览器下载PDF文件提示DLL文件丢失?解决方法汇总
    如果在使用Safari浏览器下载PDF文件时遇到提示丢失DLL文件的问题,这可能并不是因为Safari本身或PDF文件的问题,而是Windows操作系统中缺少了某些必要的库文件。以下是一些解决此问题的方法:确保安装了最新版本的AdobeReader或其他PDF阅读器:确认您的计算机上已经安装了最新版本......