java中的数学计算(大整数,小数计算精度)
2018-03-17 16:47
771 查看
BigInteger:可以实现大整数计算
构造方法:BigInteger(String val)
注意:寻常Integer是有着明确的数字上限的,它的数值上限是2147483647。因此,如果需要表示超过此数的值,则应该使用BigInteger作为数据类型。
BigInteger做+-*/运算时也是对应着add(val),subtract(val),multiply(val),divide(val)函数;
且其求余运算需要用到函数divideAndRemainder(val),括号内为除数,该函数的返回值为包含2个元素的BigInteger的数组,第一个元素为得到的商,第二个元素
4000
为余数。
在java中对小数进行运算时,会出现计算精度的问题,特别是float与double类型很容易丢失精度。所以为了能够精确表示,在计算浮点数时,java提供了BigDecimal(String val)类。
BigDecimal add(BigDecimal val) //BigDecimal 加法
BigDecimal subtract (BigDecimal val) //BigDecimal 减法
BigDecimal multiply (BigDecimal val) //BigDecimal 乘法
BigDecimal divide (BigDecimal val,RoundingMode mode) 除法
具体使用 计算:
加: a.add(b);
减: a.subtract(b);
乘: a.multiply(b);
除: a.divide(b,2);//2为精度取值
除法细解:
//注意以下相除会抛出异常,原因: 通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常
//BigDecimal divideBg = a.divide(b);
//解决方法是:设置精确度;就是给divide设置精确的小数点
divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
//其中的第二个参数表示的是:保留小数点之后多少位
BigDecimal不整除抛出的异常,请设置精确度!
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1278)
at main.Main.main(Main.java:41)
下面我们来看看除法的详细说明:
divide(BigDecimal divisor, int scale, introundingMode)
BigDecimal的setScale方法
BigDecimal.setScale()
方法用于格式化小数点
表示保留一位小数,默认用四舍五入方式
setScale(1)
直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN)
进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_UP)
四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
部分内容引自Blog:http://zhangyinhu8680.iteye.com/blog/1536397
构造方法:BigInteger(String val)
注意:寻常Integer是有着明确的数字上限的,它的数值上限是2147483647。因此,如果需要表示超过此数的值,则应该使用BigInteger作为数据类型。
BigInteger做+-*/运算时也是对应着add(val),subtract(val),multiply(val),divide(val)函数;
且其求余运算需要用到函数divideAndRemainder(val),括号内为除数,该函数的返回值为包含2个元素的BigInteger的数组,第一个元素为得到的商,第二个元素
4000
为余数。
在java中对小数进行运算时,会出现计算精度的问题,特别是float与double类型很容易丢失精度。所以为了能够精确表示,在计算浮点数时,java提供了BigDecimal(String val)类。
BigDecimal add(BigDecimal val) //BigDecimal 加法
BigDecimal subtract (BigDecimal val) //BigDecimal 减法
BigDecimal multiply (BigDecimal val) //BigDecimal 乘法
BigDecimal divide (BigDecimal val,RoundingMode mode) 除法
具体使用 计算:
加: a.add(b);
减: a.subtract(b);
乘: a.multiply(b);
除: a.divide(b,2);//2为精度取值
除法细解:
//注意以下相除会抛出异常,原因: 通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常
//BigDecimal divideBg = a.divide(b);
//解决方法是:设置精确度;就是给divide设置精确的小数点
divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)
//其中的第二个参数表示的是:保留小数点之后多少位
BigDecimal不整除抛出的异常,请设置精确度!
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1278)
at main.Main.main(Main.java:41)
下面我们来看看除法的详细说明:
divide(BigDecimal divisor, int scale, introundingMode)
BigDecimal的setScale方法
BigDecimal.setScale()
方法用于格式化小数点
表示保留一位小数,默认用四舍五入方式
setScale(1)
直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN)
进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_UP)
四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
部分内容引自Blog:http://zhangyinhu8680.iteye.com/blog/1536397
相关文章推荐
- JAVA为什么有时候除法计算结果本来应该是小数。但是得到整数int类型
- 数学运算高级工具bc:小数精度;进制转换;计算平方及平方根
- java精度计算代码 java指定精确小数位
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- JS 浮点运算精度解决办法 (把小数转换为整数进行计算【但是不能超过js的整数上限】)
- java用double和float进行小数计算精度不准确
- java中float/double浮点数的计算失去精度问题(即小数位数增加的问题)
- 如何在js中精确除法计算并保留两位小数(不丢失精度)java针对于BigDecimal类型
- js,java小数计算精度问题
- java精度计算代码,指定精确小数位
- java用double和float进行小数计算精度不准确
- Java大整数运算之计算1!+2!+…+100!的总和.
- 详解Java判断是否是整数,小数或实数的正则表达式
- java课设-计算数学表达式的程序,201521123050,肖世松,个人
- 在Java中实现小数的精确计算
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- Java float精度计算的问题,截取小数点后两位
- java double float 精度计算
- 佣金计算详解01:通过小数精度来控制判断因子中的<与<= ,>与>=
- Java中的高精度整数和高精度小数