java - Java中逗号后只保留2位小数
问题描述
我正在做一个非常简单的操作。这是代码:
float expectedTotal = 32.97;
float firstPrice = 7.99;
expectedTotal -= firstPrice;
当我断言时,expectedTotal 应该是 24.98,但我最终得到一个错误消息:
expected [24.980001] but found [24.98]
所以第一个问题是:这个 0.000001 是从哪里来的?
我在其他 stackoverflow 中读到,用浮点数处理货币并不理想,我应该使用 DecimalFormat。我尝试使用以下代码:
DecimalFormat df = new DecimalFormat("#.##");
String s = String.valueOf(expectedTotal);
String newString = df.format(s);
expectedTotal = Float.valueOf(newString);
但收到错误:
java.lang.IllegalArgumentException: Cannot format given Object as a Number
我也尝试过解析:
DecimalFormat df = new DecimalFormat("#.##");
String s = df.format(expectedTotal);
try {
expectedTotal = (float) df.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
基本上,我想要的只是expectedTotal
一个只有 2 位小数的浮点数。任何人都可以帮助我吗?
解决方案
推荐阅读
- node.js - 在 heroku 上部署时从 chokidar 获取错误
- html - 在草稿文件夹中循环以替换为 HTML 内容
- angular - 在 ngClass 中使用插值的 Angular
- css - 为什么我的 flex div 没有连续显示子级 - 并且没有应用 CSS?
- php - .htaccess 制作友好网址的问题
- c# - 更新类外的值并在 C# 中保持活动状态?
- java - PSQLException“在表上插入或更新违反外键约束”,“表中不存在键”
- github-actions - 如何为操作/结帐设置正确的路径?
- python - 3D 主机游戏距离检测无法正常工作
- python - 如何将numpy数组转换为形式((value0,row0,column0),(value1,row0,column1)...)?