网站首页 > java教程 正文
使用BigDecimal的构造函数进行封装Double、Float型数值的时候,实际创建的值与我们期望的值会出现误差,因此在进行运算时会出现精度的丢失。如何避免:使用new BigDecimal(String);
public BigDecimal(double val)
1.此构造方法的结果有一定的不可预知性。有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal 正好等于 0.1,但是它实际上等于 0.10000000000000000555111512312578270211815。这是因为 0.1 无法准确地表示 double。这样,传入到构造方法的值不会正好等于 0.1(虽然表面上等于该值)。
2.另一方面,String 构造方法是完全可预知的:写入 new BigDecimal("0.1") 将创建一个 BigDecimal,它正好 等于预期的 0.1。因此,相比较而言,通常建议优先使用 String 构造方法。
3.当 double 必须用作 BigDecimal 的源时,先使用 Double.toString(double) 方法,然后使用 BigDecimal(String) 构造方法,将 double 转换为 String。
double保留两位小数:
double d = 2.125123123123;
BigDecimal bigDecimal1 = new BigDecimal(d).setScale(2, RoundingMode.HALF_UP);
BigDecimal bigDecimal2 = new BigDecimal(d).setScale(2, BigDecimal.ROUND_HALF_UP);
猜你喜欢
- 2024-10-07 教你如何编写第一个Python程序(教你如何编写第一个python程序代码)
- 2024-10-07 BigDecimal 加减乘除、保留小位数
- 2024-10-07 TF-IDF结合余弦相似度进行文本相似度对比
- 2024-10-07 EasyExcel的使用(easy-excel)
- 2024-10-07 技术分享:hive常用内部函数(hive 内部表)
- 2024-10-07 Java数值计算中的“坑”与防范 在Java编程中
- 2024-10-07 Scala语法基础——数据类型(上)(scala类的定义)
- 2024-10-07 Java中BigDecimal处理小数点(java bigdecimal round)
- 2024-10-07 道哥说编程----Java运算符中的算数运算符
- 2024-10-07 《Java程序设计》课程代码题(一)(java程序设计题库及答案)
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)