精确使用浮点数

Posted mianyang0902

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了精确使用浮点数相关的知识,希望对你有一定的参考价值。

在计算机中所有的数字都是使用二进制进行存储的,而二进制无法精确地表示所有的小数,所以使用基本数据类型进行计算时会有误差。

加法声明:public BigDecimal add(BigDecimal m);

减法声明:public BigDecimal subtracct(BigDecimal m);

乘法声明:public BigDecimal multiply(BigDecimal m);

除法声明:public BigDecimal divide(BigDecimal m)。

 1 public class Yihuo {
 2     
 3     public static void main(String []args) {
 4         double a=2;
 5         double b=1.1;
 6         double c=a-b;
 7         System.out.println("计算结果为");
 8         System.out.println(c);
 9         BigDecimal m=new BigDecimal("2");
10         BigDecimal n=new BigDecimal("1.1");
11         BigDecimal k=m.subtract(n);
12         BigDecimal p=m.add(n);
13         BigDecimal q=m.multiply(n);
14         System.out.println("精确计算");
15         System.out.println("减法");
16         System.out.println(k);
17         System.out.println("加法");
18         System.out.println(p);
19         System.out.println("乘法");
20         System.out.println(q);21 }}

本例中用除法报错:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

at java.base/java.math.BigDecimal.divide(BigDecimal.java:1716)
at Zhen/Hao.Yihuo.main(Yihuo.java:17)

(注意: 这里m为运算操作数)

特别注意用除法时,当除不尽时会报错。

以上是关于精确使用浮点数的主要内容,如果未能解决你的问题,请参考以下文章

精确使用浮点数

怎么精确提取一个浮点数的小数部分?

Java中的简单浮点数类型float和double不能够进行精确运算

浮点数怎么表示精确度?

二进制转换字符编码的演化Python里使用的编码浮点数浮点数的精确度问题

JS实现浮点数精确舍入小数点