小数精确计算

System.out.println(2.00 -1.10);//0.8999999999999999

上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表

示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。

一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。

二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。

解决问题的第一种方式是使用货币的最小单位(分)来表示:

System.out.println(200-110);//90

第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。

例如new BigDecimal(0.1),

它将返回一个BigDecimal,

也即0.1000000000000000055511151231257827021181583404541015625,

正确使用BigDecimal,程序就可以打印出我们所期

望的结果0.9:

System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9

另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

java 小数精确_Java中小数精确计算相关推荐

  1. java中小数类型_java中小数属于什么类型的数据

    展开全部 小数属于浮点型(默认为double). 浮点型代表的是实数,其实就是包含小数的部分.也知道现实世界中是由32313133353236313431303231363533e59b9ee7ad9 ...

  2. java 时间戳最大值_Java中在时间戳计算的过程中遇到的数据溢出问题解决

    背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...

  3. java 微秒 时间_Java中时间的计算 年月日小时分钟秒毫秒微秒

    //用到的类 DateUtils //这个类存在于 org.apache.commons.lang.time.DateUtils; //也就是这个包 commons-lang-2.3.jar //AP ...

  4. java小数是怎么运算的_JAVA中小数的运算

    虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它.这容易理解 ― 我们中大多数很少需要使用非整数类型.除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它.同样,大 ...

  5. math java 计算_Java中的数学计算函数汇总

    Math类:  java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(B ...

  6. java mod %区别_Java中 % 与Math.floorMod() 区别详解

    %为取余(rem),Math.floorMod()为取模(mod) 取余取模有什么区别呢? 对于整型数a,b来说,取模运算或者取余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余 ...

  7. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  8. java异常面试_java中异常的面试

    https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...

  9. java有道_java中的各种流(老师的有道云笔记)

    内存操作流-字节 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流.此时得使用内存流完成内存的输入和输出操作. 如果程序运行过程中要产生一些临时文件,可采用虚拟文 ...

最新文章

  1. mvc 普通上传, 图片转二进制上传
  2. java学习笔记—EL表达式(38)
  3. 你写的 Java 代码是如何一步步输出结果的
  4. ASP.NET Core 1.1 Preview 1 简介(包含.NETCore 1.1升级公告)
  5. ExtJs+php学习长连接comet技术开端。
  6. 如何用jsp连接mysql_如何用jsp连接mysql数据库
  7. 000 快速排序算法
  8. python多进程并发与pool多线程
  9. 前端基础-html-表格的基本标签和相关属性
  10. jquery-ajax的同步与异步
  11. nyoj------20吝啬的国度
  12. 双层卷积神经网络--tf
  13. 爬虫笔记(四)------关于BeautifulSoup4解析器与编码
  14. 配置zabbix当内存剩余不足10%的时候触发报警
  15. Tomcat日志乱码问题解决方法
  16. 基于51单片机+LD3320语音模块+SYN6288语音合成——语音识别智能分类垃圾桶
  17. 程序员为什么要写博客
  18. python文件同时读写_python可以同时对文件进行读写操作吗
  19. VGA主机连接HDMI显示器
  20. JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析

热门文章

  1. java 数据聚合_Java数据聚合问题请教?
  2. ggplot2 调整绘图区域大小
  3. ISME:基于大数据准确预测土壤的枯萎病发生
  4. Nature子刊:使用MinION快速分析早产儿肠道菌群谱并鉴定抗生素抗性致病菌
  5. ggplot2笔记2:图层的使用——基础、怎样加标签、注释
  6. Python使用matplotlib可视化华夫饼图(Waffle Chart) 、华夫饼图可以直观地显示完成度(百分比)或者部分占整体的比例、华夫饼图适合于同类型指标的比较(Waffle Chart)
  7. R语言函数:length计算长度、seq生成数据序列、rep将数据对象重复N遍复制、cut将连续变量分割为多水平的因子变量、pretty将连续变量x分成n个区间创建合适的断点、cat数据对象拼接
  8. python使用列表推导式(list comprehension)和itertools生成浮点数列表
  9. R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序
  10. 小学计算机知识讲课,小学信息技术说课稿《走进计算机》