资讯专栏INFORMATION COLUMN

BigDecimal 学习

linkFly / 1106人阅读

摘要:然而表示这个是的锅,我不背。的表示一共的数字位能存储个,表示存储两位小数。因为默认是保留两位小数,超过了精度,所以保存近似值。大范围低精度存储。很准确,采用科学计数法,损失精度,但能存储更大范围的数据,但是精度有损失。

BigDecimal

为什么要使用这个呢?简单点说就是商业要求精度计算,而double计算出来的结果,往往出人意料。

例子 Double运算

结果是个这么个东西,这个是因为计算机中存储浮点数是通过指数和尾数进行表示的。

说简单点就是二进制无法准确表示浮点数,所以我们需要用BigDecimal

BigDecimal运算

我们再用BigDecimal进行一遍计算,新建两个BigDecimal对象,然后调用add方法进行加操作。

什么?结果还是不对。

然而BigDecimal表示这个是Double的锅,我不背。

因为Double本来的数据就是不准确的,然后我们用一个不准确的数据去构造BigDecimal,肯定不对啊。

String

既然Double不准确,我们就用其String类型的构造函数进行初始化。

可下算对了,庆祝一下。

存储 映射

新建实体,测试一下Hibernate为我们映射成了数据库中的什么属性。

@Entity
public class TestEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private BigDecimal testDecimal;

    private Double testDouble;
}

decimal19表示一共的数字位能存储19个,2表示存储两位小数。

Java 数据库
BigDecimal decimal
Double double
存储范围 小范围低精度

存储12345678.99

没什么说的,两者存储都没什么压力。

小范围高精度

存储12345678.99999

因为默认decimal是保留两位小数,超过了精度,所以保存近似值。

大范围低精度

存储1234567812345678.99

decimal很准确,double采用科学计数法,损失精度,但能存储更大范围的数据,但是精度有损失。

大范围高精度

存储1234567812345678.99999

两个都不准确,想准确,需要设置decimal为更高的精度。

总结

Double因为某些情况下无法精确地表示浮点数,所以我们需要使用BigDecimal进行计算。

Double本来就不准确,再去初始化BigDecimal肯定也不准确,所以建议使用String类型的构造方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76758.html

相关文章

  • 180706-BigDecimal除法的精度问题

    摘要:除法的精度问题在使用的除法时,遇到一个鬼畜的问题,本以为的精度计算,结果使用返回,当然最终发现还是自己的使用姿势不对导致的,因此记录一下,避免后面重蹈覆辙问题抛出在使用做高精度的除法时,一不注意遇到了一个小问题,如下上面的输出是什么 showImg(https://segmentfault.com/img/remote/1460000015555232); BigDecimal除法的精...

    imccl 评论0 收藏0
  • 180615-精度计算BigDecimal

    摘要:文章链接精度计算精度计算目前接触的业务中,对数据的精度要求比较高,因此不再使用基本的,改为用进行存储和相关的计算,端午前的这一篇博文,则简单的介绍下的使用姿势,早点回家早点放假基本使用构造方法几个常见的构造方式,将基本类型等,转 showImg(https://segmentfault.com/img/remote/1460000015303995); 文章链接:https://liu...

    phodal 评论0 收藏0
  • 拯救你丢失的精度——BigInteger和BigDecimal类(入门)

    摘要:返回的是是一个整数的最小值。笔记这个构造函数的结果可能有些不可预测。这是因为不能像或者作为任何有限长度的二进制分数精确地表示。当必须用作源为,注意,此构造提供了一个精确的转换它不会将转换为使用方法,然后使用构造函数相同的结果。 第三阶段 JAVA常见对象的学习 BigInteger和BigDecimal类 BigInteger类 (一) 构造方法: //针对超过整数范围的运算(整数最大...

    TerryCai 评论0 收藏0
  • java学习(五) —— 常用API类概述

    摘要:成员方法类概述用于产生随机数成员方法正则表达式相关方法判断功能分割功能替换功能获取功能和类的使用类概述包含一些有用的类字段和方法。注意它不能被实例化,因为此类构造器是私有的成员方法类类概述表示特定的瞬间,精确到毫秒。 前言 我们都知道,JDK包含了JRE,而JRE中也提供了各种功能的java类,现在我们就对这些类有个简单了解,然后灵活运用。 常用类:Object类/Scanner类,...

    Tecode 评论0 收藏0
  • 第一个java后端项目总结

    摘要:项目环境用于发送请求测试项目介绍这是一个商城项目,本来想起名叫项目,发现自己并没有用。也是自己第一篇博客,记录一下自己的学习过程,希望一方面能多做写项目锻炼能力,另一方面也让自己在做完之后写写博客自己总结反思。 1.项目环境 IDEA15 spring4 mybatis3.4 mysql RestLet Client用于发送请求测试 2.项目介绍 这是一个商城项目,本来想起名叫SSM项...

    Hwg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<