不能直接运算 是因为计算机储存浮点类型的数值使用指数和尾数来表示 这就意味着计算时会出现“精度缺失”的现象

为了解决这个问题 我们引入 java.math.BigDecimal类来进行精确计算。

具体如下:

public class Arith {

//加法运算
    public  static double add(double v1,double v2){  
            BigDecimal b1 = new BigDecimal(Double.toString(v1));  
            BigDecimal b2 = new BigDecimal(Double.toString(v2));  
            return b1.add(b2).doubleValue();

}

// 减法运算
    public static double sub(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));  
            BigDecimal b2 = new BigDecimal(Double.toString(v2));  
            return b1.subtract(b2).doubleValue();

}
  

  // 乘法运算
    public static double mul(double d1, double d2){        
             BigDecimal b1 = new BigDecimal(d1);
             BigDecimal b2 = new BigDecimal(d2);
            return b1.multiply(b2).doubleValue();

}

// 除法运算
    public static  double div(double d1,double d2,int len) {
             BigDecimal b1 = new BigDecimal(d1);
             BigDecimal b2 = new BigDecimal(d2);
            return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();

}

// 四舍五入
        public  double round(double d,int len) { 
             BigDecimal b1 = new BigDecimal(d);
             BigDecimal b2 = new BigDecimal(1);

// 任何一个数字除以1都是原数字

   // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
            return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();
         }
}

转载于:https://www.cnblogs.com/igong/p/9795710.html

Java开发中 Double 和 float 不能直接运算相关推荐

  1. double java 精度丢失_java中double和float精度丢失问题及解决方法

    在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...

  2. Java开发中的基本数据类型有哪些?

    Java中的基本数据类型 Java提供了八种基本类型,可以大致划分为如下几类: 6种数字类型 4种整数型 2种浮点型 1种字符类型 1种布尔类型 Java开发中的基本数据类型有哪些? 具体内容是: b ...

  3. 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)

    第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...

  4. java 线程 john_教你Java开发中多线程同步技巧

    教你Java开发中多线程同步技巧 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java ...

  5. java开发中遇到的问题及解决方法(持续更新)

    java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...

  6. Java开发中Websocket的技术选型参考

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  7. Java开发中文件读取方式总结

    JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径.路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:abc1.txt. 什么是相对路径呢?相对路径就是 ...

  8. Java开发中消息中间件的优势有哪些?

    系统解耦 交互系统之间没有直接的调用关系,只是通过消息传输,故系统侵入性不强,耦合度低. 提高系统响应时间 例如原来的一套逻辑,完成支付可能涉及先修改订单状态.计算会员积分.通知物流配送几个逻辑才能完 ...

  9. Java开发中Netty线程模型原理解析!

    Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建.Netty 线程模型不是一成不变的,取决于用户的启动参数配 ...

最新文章

  1. python爬虫代码实例-Python爬虫之urllib示例
  2. Google common_schema 2.2 documentation
  3. 在茫茫人海中发现相似的你——局部敏感哈希(LSH)
  4. 现代密码学3.7--CCA安全
  5. asp.net页面中hmtl注释的问题
  6. HDU - 5157 Harry and magic string(回文自动机)
  7. Linux gcc编译c/c++基本过程
  8. angular ui组件_使用Angular Material将现代UI组件添加到Angular项目中
  9. 分析CVPR 2019论文关键词,我看到了计算机视觉的最新趋势 | 附代码
  10. 高数下学习笔记——思维导图
  11. java linux 写文件_Java读写文件
  12. lbp2900打印机linux驱动下载,佳能LBP2900打印机驱动
  13. vivo8.0系统机器最完美激活xposed框架的方法
  14. 易經大意(21) 三和 韓長庚 著
  15. proteus仿真micropython_【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉...
  16. Latex beamer 制作 PPT
  17. 理解围绕软件技术标准的上层动机和力量
  18. 产销存报表直接在MB5B上取数
  19. 云ERP和本地ERP的区别是什么
  20. 公链求生记:我要干外包

热门文章

  1. android 7.0编译报错,编译android7.0 sdk错误解决方法
  2. java 日期是否合法_检测日期字符串是否为合法(java版)
  3. 联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...
  4. mac mysql创建本地数据库_【mac】配置本地数据库
  5. 巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!
  6. 8086标志操作指令
  7. 【神经网络扩展】:断点续训和参数提取
  8. 在SQL中使用DEFAULT约束
  9. Java ObjectInputStream readLong()方法(带示例)
  10. pata1015_ATA / PATA的完整形式是什么?