(以下使用Java 8回答。)

您看到的问题来自于指定" 0.15"或" 0.05"在代码中,当表示为double时,略小于0.15。看看这个

DecimalFormat df = new DecimalFormat("#.#");

df.setRoundingMode(RoundingMode.HALF_UP);

BigDecimal bd = new BigDecimal(0.15);

System.out.println("bd=" + bd);

System.out.println(df.format(0.15)); // expecting 0.1, getting 0.1

bd = new BigDecimal(0.05);

System.out.println("bd=" + bd);

System.out.println(df.format(0.05));

bd = new BigDecimal(0.06);

System.out.println("bd=" + bd);

System.out.println(df.format(0.06));

此代码的输出是

bd=0.1499999999999999944488848768742172978818416595458984375

0.1

bd=0.05000000000000000277555756156289135105907917022705078125

0.1

bd=0.059999999999999997779553950749686919152736663818359375

0.1

一个可能的解决方案(如果你绝对需要它以正确的方式进行舍入)是使用BigDecimal.valueOf来创建值。例如

BigDecimal bd = BigDecimal.valueOf(0.15);

System.out.println("bd=" + bd);

System.out.println(df.format(bd)); // expecting 0.1, getting 0.1

bd = BigDecimal.valueOf(0.05);

System.out.println("bd=" + bd);

System.out.println(df.format(bd));

bd = BigDecimal.valueOf(0.06);

System.out.println("bd=" + bd);

System.out.println(df.format(bd));

现在会产生

bd=0.15

0.2

bd=0.05

0.1

bd=0.06

0.1

顺便说一下,正如Scary Wombat指出的那样,掩码设置为0.0而不是#。#将使0.6为0.但我认为这是后来的编辑,然后我开始查看它。使用#。#。

java roundingmode.UP,即使明确设置,DecimalFormat也使用不正确的RoundingMode相关推荐

  1. 【Android NDK 开发】JNI 方法解析 ( C/C++ 设置 Java 对象字段 | 查找字段 | 设置字段 )

    文章目录 I . 设置 Java 对象 属性 流程 II . 查找 Java 对象属性 ( GetFieldID ) III . 设置 Java 对象属性 ( SetXxxField ) I . 设置 ...

  2. java tessdata训练_Tesseract For Java为可执行jar设置Tessdata_Prefix

    该项目的最终目标是获取jar并将其放在使用tesseract的目录中,并输出结果目录和输出txt文件.不过,我在使用tesseract时遇到了一些问题. 我正在使用 Java中的tess4j与Mave ...

  3. Eclipse中java文件头注释格式设置

    2019独角兽企业重金招聘Python工程师标准>>> Eclipse中java文件头注释格式设置 Eclipse中java文件头注释格式设置 windows->prefere ...

  4. java浏览器安全设置,主编练习win7系统运行java提示“您的安全设置已阻止不可信应用程序运行”的对策...

    根据小编的调查并不是所有的朋友都知道win7系统运行java提示"您的安全设置已阻止不可信应用程序运行"的问题怎么解决,就向我询问有什么办法可以解决win7系统运行java提示&q ...

  5. java线程池的参数设置

    java线程池的参数设置 在说如何对线程池优化之前重复一下线程的7大参数 corePoolSize: 核心线程数,也是线程池中常驻的线程数,线程池初始化时默认是没有线程的,当任务来临时才开始创建线程去 ...

  6. java excel打印_Java如何设置电子表格的打印区域?

    在Java编程中,如何设置电子表格的打印区域? 注意:需要访问网址: , 下载一个Apache POI软件包.这里下载最新版本:poi-bin-3.17-20170915.tar.gz解压并将全部.j ...

  7. java word 纸张大小_Java 设置 Word 页边距, 页面大小, 页面方向, 页面边框

    Java 设置 Word 页边距, 页面大小, 页面方向, 页面边框 本文将通过 Java 示例介绍如何设置 Word 页边距 (包括上, 下, 左, 右), 页面大小 (可设置 Letter/A3/ ...

  8. java动态生成ppt字体设置

    我用java动态生成ppt,设置文本的字体为"华文楷体",如果文本是英文,则英文的字体就是华文楷体,但是如果是中文,中文的字体还是宋体,没有发生变化.请教高手们,这个该怎么修改呢? ...

  9. 用java将bing每日壁纸设置为win7壁纸

    原文:用java将bing每日壁纸设置为win7壁纸 源代码下载地址:http://www.zuidaima.com/share/1550463716592640.htm 之前发表了"用ja ...

最新文章

  1. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)
  2. java phantomjs 2.1.1_Java之网络爬虫WebCollector2.1.2+selenium2.44+phantomjs2.1.1
  3. C++ IPv4与IPv6的兼容编码(转,出自http://blog.csdn.net/ligt0610/article/details/18667595)...
  4. 计算机思维测试题,10道有趣的小学生思维测试题,和孩子一起来测一测吧!文末附答案解析...
  5. usestate中的回调函数_React 中获取数据的 3 种方法:哪种最好?
  6. 解决larave-dompdf中文字体显示问题
  7. 计算机专业英语读书报告,英语读书报告怎么写
  8. 性能测试知多少---性能需求分析
  9. JavaScript面向对象学习小结
  10. 汉王人脸考勤管理系统 Check SQL注入漏洞
  11. 华为USG6000V双机热备HRRP
  12. 小学生计算机兴趣班名字,小学生网名大全
  13. 设计模式(一):工厂模式
  14. 游戏公司的区块链冒险:一周时间从火爆到熄火
  15. Ubuntu18.04安装carla0.9.9 UE4.24踩坑版
  16. ESP32开发二_LED闪烁灯
  17. java imageio 使用_java – 使用ImageIO发送图像流?
  18. 题解 SP2916 【GSS5 - Can you answer these queries V】
  19. SDUST 第二次实验
  20. 基于JAVA服务预约家教网站系统设计与实现 开题报告

热门文章

  1. 亚马逊aws深度学习_AWS速查表:Amazon Web Services入门时首先要学习的5件事
  2. 如何使用CloudFormation自动在AWS EC2上安装Anaconda
  3. haproxy 负载_负载测试HAProxy(第1部分)
  4. Java:注解和反射
  5. 您能解决这3个(看似)简单的Python问题吗?
  6. Python装饰器详解,详细介绍它的应用场景
  7. 官宣 | Apache Flink 1.12.0 正式发布,流批一体真正统一运行!
  8. Hive分析函数--row_number 的用法
  9. 如何快速查找下载java项目所需jar包
  10. Ext.data-GroupingStore/JsonStore/SimpleStore