Java中double类型数据的精度问题
2024-08-27 05:59:06
今天在写段代码模拟计算器的时候,偶然发现,当我进行小数运算的时候,竟然出现了令我惊讶的结果,后来问了问度娘,才晓得,原来这里面还有点知识呢,下面是介绍:
你猜下面几句的结果是多少?
public class Demo{
@Test
public void demo3() {
System.out.println(1 - 0.42);
System.out.println(2.4 + 1.2);
System.out.println(4.015 * 100);
System.out.println(123.1 / 100);
}
}
但我想告诉你,在控制台上输出的结果是:
0.5800000000000001
3.5999999999999996
401.49999999999994
1.2309999999999999
那么对应的解决方案是啥呢?
我这里给出了一段代码:
public class Demo{
@Test
public void demo3() {
BigDecimal bd = new BigDecimal("1");
System.out.println(bd.subtract(new BigDecimal("0.42")));
}
}
这段代码就告诉了你,当你用到浮点数的时候,为避免出现精度失真的情况,可以用BigDecimal来计算,注意:BigDecimal的构造器中,你传入的是字符串哟!!
如果你还想进行加法、乘法、除法的话,推荐你看看JDK中java.lang.math这个包下的BigDecimal具体方法,可以满足你的一般需求(包括小数点后保留几位等),当然,要是你觉得这样还是不够简便的话,你完全可以自己写个tool类,来专门完成你的运算,内部就用BigDecimal来实现,用的时候,你想怎么调用怎么调用(前提是你的tool类中要封装好这些方法)。
嘿嘿,就这些了!!
最新文章
- virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)
- C++11笔记<;一>;
- code first 创建和初始化数据库
- mac攻略(六) -- mac根目录分析
- KnockoutJS 3.X API 第三章 计算监控属性(2) 可赋值的计算监控属性
- 高端黑链SEO—恶意JS脚本注入访问伪随机域名
- BST树
- Hibernate解决n+1问题
- IP的正则表达式
- SharePoint 2013 配置我的网站 图文引导
- shell脚本实现仅保留某目录下最新的两个文件
- Android SQLite的使用1(非原创)
- 新学了一个用python编写的简单的百度贴吧帖子的爬虫
- Android4.2中Phone的P-sensor的应用的分析。
- html5学习(一) video字段
- 02-C#(基础)基本的定义和说明
- 基于文本图形(ncurses)的文本搜索工具 ncgrep
- Python操作Redis及连接方式
- poj1456
- 搭建iview环境
热门文章
- (Java)利用ListIterator(iterator 重复器/迭代器的子接口) 操作ArrayList
- DNS(三)DNS SEC(域名系统安全扩展)
- [原创]使用命令行工具提升cocos2d-x开发效率(二)之CocosBuilder篇
- uva 12296 Pieces and Discs
- HDU-4608 I-number 枚举
- ovirt user guide
- hdu4777-Rabbit Kingdom
- 软件开发中的单一职责(转至INFOQ)
- 起底多线程同步锁(iOS)
- UITableView性能优化