广告
返回顶部
首页 > 资讯 > 后端开发 > Python >注意Java中 new BigDecimal(double val) 的使用
  • 748
分享到

注意Java中 new BigDecimal(double val) 的使用

2024-04-02 19:04:59 748人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录问题解决总结前言: 今天下午跑单元测试报错,发现一个关于 new BigDecimal(double val) 的代码问题,总结下。 问题 业务代码: public stati

前言:

今天下午跑单元测试报错,发现一个关于 new BigDecimal(double val) 的代码问题,总结下。

问题

业务代码:


public static boolean comparePrice(BigDecimal frontPrice, BigDecimal realPrice) {
    return frontPrice.compareTo(realPrice) == 0;
}

测试代码:


BigDecimal forntPrice = new BigDecimal(0.2);

然后测试 comparePrice 方法总是返回 false,frontPrice 和 realPrice 明明是相等的, 都是0.2。

经过断点排查问题发现 frontPrice 的值不是 0.2,而是 0.200000000000000011102230246251565404236316680908203125 。

我靠,怎么出现这种情况,BigDecimal 不是精准运算的吗?

解决

查看相关文档:

简单翻一下:

将 double 类型转换成 BigDecimal 类型。

  • 这个构造函数的结果在某种程度上是不可预测的。你可能会觉得new BigDecimal(0.1)会创建一个刚好等于 0.1 的 BigDecimal,但它实际上等于 0.1000000000000000055511151231257827021181583404541015625 。这是因为 0.1 不能被精确地表示为一个双精度数。
  • String 构造函数是完全可预测的,new BigDecimal("0.1")会创建一个完全等于 0.1 的 BigDecimal,建议优先使用 String 构造函数。
  • 如果必须使用 double 作为转换源时,可以使用 BigDecimal.valueOf(0.1) ,它返回的结果也是精确的。

总结

将 double 类型转换为 BigDecimal 类型的时候,不要使用new BigDecimal(0.1)这个构造函数,应为它得到的结果是不精确的,

使用BigDecimal.valueOf(0.1)new BigDecimal("0.1") 。

使用 IDEA 编码的时候会给警告提示:

到此这篇关于注意Java中 new BigDecimal(double val) 的使用的文章就介绍到这了,更多相关Java new BigDecimal内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 注意Java中 new BigDecimal(double val) 的使用

本文链接: https://www.lsjlt.com/news/164917.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 注意Java中 new BigDecimal(double val) 的使用
    目录问题解决总结前言: 今天下午跑单元测试报错,发现一个关于 new BigDecimal(double val) 的代码问题,总结下。 问题 业务代码: public stati...
    99+
    2022-11-13
  • Java BigDecimal类的一般使用、BigDecimal转double方式
    目录BigDecimal类的一般使用、BigDecimal转doubleBigDecimal大据类BigDecimal类创建一个BigDecimal对象方法声明BigDecimal转...
    99+
    2022-11-13
  • BigDecimal和double怎么在Java中使用
    本篇文章为大家展示了 BigDecimal和double怎么在Java中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。BigDecimal类对于不需要任何准确计算精度的数字可以直接使用float...
    99+
    2023-05-30
    java double bigdecimal
  • Java中使用BigDecimal要注意什么
    这篇文章主要介绍“Java中使用BigDecimal要注意什么”,在日常操作中,相信很多人在Java中使用BigDecimal要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java中使用BigDec...
    99+
    2023-07-05
  • Java中BigDecimal使用注意避坑指南
    目录前言一. BigDecimal的初始化精度丢失问题二. BigDecimal在进行除法运算时需设置精度,否则对于除不尽的情况会抛出异常三. 不要使用BigDecimal的equa...
    99+
    2023-02-20
    java bigdecimal用法 bigdecimal类型数据处理 java中bigdecimal
  • Java中BigDecimal的加减乘除、比较大小与使用注意事项
    前言借用《Effactive Java》这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结...
    99+
    2023-05-30
    java bigdecimal 加减乘除
  • java使用new创建对象时要注意什么
    在使用Java的`new`关键字创建对象时,需要注意以下几点:1. 类必须具有公共的构造方法:在使用`new`关键字创建对象时,需要...
    99+
    2023-10-10
    java
  • java中的BigDecimal使用
    文章目录 1、什么是BigDecimal?2、为什么使用BigDecimal?3、如何使用BigDecimal?(1)BigDecimal初始化赋值(2)加减乘除运算(3)BigDecimal保留两位小数及舍入模式(4)BigDec...
    99+
    2023-08-25
    java 开发语言 算法
  • 怎么使用Java中的BigDecimal
    这篇文章主要介绍“怎么使用Java中的BigDecimal”,在日常操作中,相信很多人在怎么使用Java中的BigDecimal问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java中的BigDeci...
    99+
    2023-06-16
  • java中BigDecimal的使用方法
    小编给大家分享一下java中BigDecimal的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、BigDecimal使用scale()表示小数位数。&...
    99+
    2023-06-15
  • java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题
    文章目录 一、BigDecimal概述二、BigDecimal常用构造方法三、BigDecimal常用方法四、BigDecimal进阶BigDecimal的八种舍入模式BigDecimal格式化、小数点转换货币格式化与百分比格式化 ...
    99+
    2023-08-18
    java BigDecimal BigDecimal的使用及坑
  • java中BigDecimal的介绍及使用
    BigDecimal是Java中的一个类,用于表示任意精度的十进制数。它提供了精确的数值计算,避免了浮点数计算时的精度损失。使用Bi...
    99+
    2023-09-09
    java
  • Java中BigDecimal的舍入模式怎么使用
    这篇文章主要讲解了“Java中BigDecimal的舍入模式怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中BigDecimal的舍入模式怎么使用”吧!BigDecimal的...
    99+
    2023-07-02
  • Java使用MessageFormat应注意的问题
    目录问题现象问题排查如何解决问题现象 某个业务功能需要通过SSH协议执行命令查询一些数据,而某次查询居然没有得到任何结果,导致界面没有任何数据,但是手动执行这个命令又是能够查询到数据...
    99+
    2022-11-13
  • java中CAS使用需要注意什么
    这篇文章将为大家详细讲解有关java中CAS使用需要注意什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queu...
    99+
    2023-06-14
  • Java中Process类的使用与注意事项说明
    目录Process类的使用与注意事项说明1、在项目开发中2、在这里就需要认识一下process类3、来说说今天业务需求[waitfor()]:4、前不久遇到一个奇怪的问题就是ajax...
    99+
    2022-11-12
  • Springboot中@RequestBody注解使用的注意事项
    这篇文章将为大家详细讲解有关Springboot中@RequestBody注解使用的注意事项,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。@RequestBody注解踩坑@RequestBody json...
    99+
    2023-06-29
  • java中使用equals()方法要注意哪些事项
    在java中使用equals()方法时,需要注意以下几点事项:1. 避免空指针异常:在调用equals()方法之前,需要确保对象不为...
    99+
    2023-09-15
    java
  • Java中数组的使用与注意事项详解(推荐)
    目录一.初始数组二.数组的创建三.使用数组时的注意事项(1)初始化问题(2)数组长度的使用(3)有关数组长度的问题(4)对于数组的访问(5)数组的遍历三.数组的类型1、每个部分数据区...
    99+
    2022-11-12
  • 关于Java中增强for循环使用的注意事项
    序言 for循环语句是java循环语句中最常用的循环语句,一般用在循环次数已知的情况下使用。for循环语句的语法格式如下: java语言 for语句的用法   for(...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作