展开全部

在大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中,这种问题是非常严重的。62616964757a686964616fe78988e69d8331333337393636

在《Effective Java》中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类我们可以解决上述问题,实例代码如下:package ex;

import java.math.*;

public class BigDecimalDemo {

public static void main(String[] args){

System.out.println(ArithUtil.add(0.01, 0.05));

System.out.println(ArithUtil.sub(1.0, 0.42));

System.out.println(ArithUtil.mul(4.015, 100));

System.out.println(ArithUtil.div(123.3, 100));

}

}

class ArithUtil{

private static final int DEF_DIV_SCALE=10;

private ArithUtil(){}

public static double add(double d1,double d2){

BigDecimal b1=new BigDecimal(Double.toString(d1));

BigDecimal b2=new BigDecimal(Double.toString(d2));

return b1.add(b2).doubleValue();

}

public static double sub(double d1,double d2){

BigDecimal b1=new BigDecimal(Double.toString(d1));

BigDecimal b2=new BigDecimal(Double.toString(d2));

return b1.subtract(b2).doubleValue();

}

public static double mul(double d1,double d2){

BigDecimal b1=new BigDecimal(Double.toString(d1));

BigDecimal b2=new BigDecimal(Double.toString(d2));

return b1.multiply(b2).doubleValue();

}

public static double div(double d1,double d2){

return div(d1,d2,DEF_DIV_SCALE);

}

public static double div(double d1,double d2,int scale){

if(scale<0){

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

BigDecimal b1=new BigDecimal(Double.toString(d1));

BigDecimal b2=new BigDecimal(Double.toString(d2));

return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

}

math sub Java_java初学减法运算相关推荐

  1. math.hypot java_Java之Math类

    Java之Math类# Java的Math类封装了很多与数学有关的属性和方法,后续遇到常用也会直接在这篇博客更新...### public static void t2() { System.out. ...

  2. math.hypot java_Java math

    Java math 函数 JavaMath类提供了几种用于数学计算的方法,例如min(),max(),avg(),sin(),cos(),tan(),round(),ceil(),floor(),ab ...

  3. math.hypot java_Java Math.hypot() 方法

    Java Math.hypot() 方法 java.lang.Math.hypot() 用于返回的指定的参数的平方和的平方根,没有中间溢出或下溢. 1 语法 public static double ...

  4. math.floor java_Java Math.floor() 方法

    Java Math.floor() 方法 java.lang.Math.floor() 返回最大的(最接近正无穷大)double值,该值小于或等于参数,并等于某个整数. 1 语法 public sta ...

  5. math.hypot java_Java Math hypot()用法及代码示例

    java.lang.Math.hypot()函数是Java中的内置数学函数,可返回欧几里得范数, .函数返回sqrt(x2+ y2),而不会出现中间上溢或下溢. 如果任何一个参数都是无限大,则结果为正 ...

  6. math.hypot java_java.lang.Math.hypot(double x, double y)方法实例

    全屏 java.lang.Math.hypot(double x, double y) 返回 sqrt(x2 +y2) 没有中间溢或下溢.特殊情况:如果任一参数为无穷大,那么结果为正无穷大. 如果任一 ...

  7. rational java_Java初学-Rational类

    Rational类的书写 1. 代码 Rational.java package rational; public class Rational extends Number implements C ...

  8. math.ceil java_java向上取整函数Math.ceil()

    java向上取整函数Math.ceil() 百度Math.ceil()函数:"Math.ceil()是常见编程语言中的常用代码,ceil() 方法执行的是向上取整计算,它返回的是大于或等于函 ...

  9. 随机加解密java_JAVA随机数生成 Math.random和java.util.Random使用简介

    一.Math.random 1Math.random内部使用java.util.Random实现 2 直接调用Math.random是产生一个[0,1)之间的随机数 public static voi ...

最新文章

  1. 深度全解卷积神经网络(附论文)
  2. centos运行jar包需要的环境_CentOS 7.4下运行jar包
  3. 十二、深入Java的循环语句
  4. c语言二级指针有什么作用,C语言中二级指针的实例详解
  5. 考下这个法律证书,轻松拿编制,年薪高达20W+!
  6. 30 岁程序员:关于编程,我终于想清楚这 30 件事了!
  7. AJAX for Java简单表数据查询实例
  8. vue-router 中router-view不能渲染
  9. PLSC(Partial Least Square Correlation)偏最小二乘相关
  10. 计算机简单进制转换题目,计算机数制转换题!(1011011)2 =( )10=( )16 =( )8(110111101)2 =( )10=(...
  11. su命令的隐患——用户提权
  12. 苹果cms后台登录验证码错误或显示不出来解决方法
  13. 键盘里Insert作用
  14. Python之龟兔赛跑
  15. 荣耀magic v参数配置
  16. 【云周刊】第130期:阿里研究院发布新网商五大预测,2020年将诞生第一个机器人网商?
  17. linux下查看系统内存使用情况的几个命令
  18. 网易秘密启动“D计划” 引爆新一轮电子邮箱大战
  19. matlab 根轨迹 虚轴交点,根轨迹与虚轴的交点.ppt
  20. 强行替换exe图标的方法

热门文章

  1. Firefox浏览器-渗透测试插件推荐
  2. 黑科技丨电脑必备的chrome插件(一)
  3. 专利之争:诺基亚与苹果互指对方侵权(每日关注2009.12.31)
  4. 爬虫爬取大量高清壁纸图片
  5. Dart_Flutter【插件介绍+平台发布+视频】【180个网址导航】
  6. 【重识云原生】第一章——不谋全局不足以谋一域
  7. java笔记之基础-outer标签
  8. ksoftirqid进程CPU100%排查
  9. 使用EasyExcel导入、根据模板下载(附前后端代码)
  10. Power Apps函数笔记