BigDecimal运算

匿名 (未验证) 提交于 2019-12-02 23:43:01

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

 

运行结果:

 加法用value结果:1000000.005000000000000000104083408558608425664715468883514404296875 加法用string结果:1000000.005 减法value结果:-999999.994999999999999999895916591441391574335284531116485595703125 减法用string结果:-999999.995 乘法用value结果:5000.000000000000104083408558608425664715468883514404296875000000 乘法用string结果:5000.000 绝对值用value结果:1000000 绝对值用string结果:1000000 除法用value结果:199999999.99999999583666365766 除法用string结果:200000000.00000000000000000000

因此建议使用String初始化。

1)System.out.println()中的数字默认是double类型的,double类型小数计算不精准。

2)使用BigDecimal类构造方法传入double类型时,计算的结果也是不精确的!

因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。

LeetCode:

Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

给定两个表示为字符串的数字,返回这两个数字的乘法运算结果。
注意:数字可以任意大且非负。

其中一种java语言解法利用到了BigDecimal.代码如下:

 import java.math.BigDecimal; public class Solution {     public String multiply(String num1, String num2) {         return new BigDecimal(num1).multiply(new BigDecimal(num2)).toString();     } }

文章来源: https://blog.csdn.net/weixin_42047723/article/details/92404119
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!