Java数据类型-精度失真问题

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据类型-精度失真问题相关的知识,希望对你有一定的参考价值。

百度百科
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。
双精度浮点型变量double可以处理16位有效数。

在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal

BigDecimal所创建的是对象,不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。
方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

在Java开发过程中有时会遇到一些必要的运算,最重要的是一些项目是金融相关的项目对这些运算的精度要求非常高。为什么会出现精度丢失的情况呢?我们又该如何解决这种精度丢失的问题呢?

那就要我们从类型转换开始了。。
在类型转换中,整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。

float a = 3.14;这个语句的意思是把双精度浮点类型(double)赋值给单精度浮点类型(float)的变量a,把一个高精度的数赋值给一个低精度的数,就会造成精度丢失了。

Bigdecimal的类的一些调用:
加法 add()函数 减法subtract()函数
乘法multiply()函数 除法divide()函数 绝对值abs()函数

以上是关于Java数据类型-精度失真问题的主要内容,如果未能解决你的问题,请参考以下文章

java中,当要处理的整数太大,超出了long的范围,应该用啥基本类型去处理,实现对这个数的加减法运算

04-JAVA高精度数字

减法导致精度问题

高精度算法—减法篇

Java中具有不同数据类型的复合减法[重复]

高精度运算(除法待完善)