Java开发中 Double 和 float 不能直接运算
不能直接运算 是因为计算机储存浮点类型的数值使用指数和尾数来表示 这就意味着计算时会出现“精度缺失”的现象
为了解决这个问题 我们引入 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 不能直接运算相关推荐
- double java 精度丢失_java中double和float精度丢失问题及解决方法
在讨论两位double数0.2和0.3相加时,毫无疑问他们相加的结果是0.5.但是问题总是如此吗? 下面我们让下面两个doubles数相加,然后看看输出结果: @Test public void te ...
- Java开发中的基本数据类型有哪些?
Java中的基本数据类型 Java提供了八种基本类型,可以大致划分为如下几类: 6种数字类型 4种整数型 2种浮点型 1种字符类型 1种布尔类型 Java开发中的基本数据类型有哪些? 具体内容是: b ...
- 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)
第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...
- java 线程 john_教你Java开发中多线程同步技巧
教你Java开发中多线程同步技巧 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题.在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java ...
- java开发中遇到的问题及解决方法(持续更新)
java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...
- Java开发中Websocket的技术选型参考
1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...
- Java开发中文件读取方式总结
JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径.路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:abc1.txt. 什么是相对路径呢?相对路径就是 ...
- Java开发中消息中间件的优势有哪些?
系统解耦 交互系统之间没有直接的调用关系,只是通过消息传输,故系统侵入性不强,耦合度低. 提高系统响应时间 例如原来的一套逻辑,完成支付可能涉及先修改订单状态.计算会员积分.通知物流配送几个逻辑才能完 ...
- Java开发中Netty线程模型原理解析!
Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建.Netty 线程模型不是一成不变的,取决于用户的启动参数配 ...
最新文章
- python爬虫代码实例-Python爬虫之urllib示例
- Google common_schema 2.2 documentation
- 在茫茫人海中发现相似的你——局部敏感哈希(LSH)
- 现代密码学3.7--CCA安全
- asp.net页面中hmtl注释的问题
- HDU - 5157 Harry and magic string(回文自动机)
- Linux gcc编译c/c++基本过程
- angular ui组件_使用Angular Material将现代UI组件添加到Angular项目中
- 分析CVPR 2019论文关键词,我看到了计算机视觉的最新趋势 | 附代码
- 高数下学习笔记——思维导图
- java linux 写文件_Java读写文件
- lbp2900打印机linux驱动下载,佳能LBP2900打印机驱动
- vivo8.0系统机器最完美激活xposed框架的方法
- 易經大意(21) 三和 韓長庚 著
- proteus仿真micropython_【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉...
- Latex beamer 制作 PPT
- 理解围绕软件技术标准的上层动机和力量
- 产销存报表直接在MB5B上取数
- 云ERP和本地ERP的区别是什么
- 公链求生记:我要干外包
热门文章
- android 7.0编译报错,编译android7.0 sdk错误解决方法
- java 日期是否合法_检测日期字符串是否为合法(java版)
- 联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...
- mac mysql创建本地数据库_【mac】配置本地数据库
- 巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!
- 8086标志操作指令
- 【神经网络扩展】:断点续训和参数提取
- 在SQL中使用DEFAULT约束
- Java ObjectInputStream readLong()方法(带示例)
- pata1015_ATA / PATA的完整形式是什么?