java - 如何在十进制类型的结果中强制添加两位小数?
问题描述
- 结果强制保留两位小数(例如:10. 56 , 34. 56)。
- 在我的情况下: 10.0 应该是10.00和 10.5 应该是10.50和 10.3494 应该是10.35。
解决方案
Java(和大多数语言)中的decimal
数字将始终具有完全精度。Java 没有不同事物10.0
的概念。10.00
所以如果我写:
double x = 10.0;
那么x
其实就是10.0000000000000....
(精确精度的细节出奇的复杂,而且很大程度上无关紧要,所以我不会在这里详细介绍,但对于日常使用来说已经绰绰有余了。)
您可以做的是将 double显示为字符串,四舍五入到小数点后 2 位,如下所示:
String str = String.format(".2f", x);
在这种情况下str
将"10.00"
. 还有很多其他的选择String.format()
,我建议你搜索例子!请注意,结果是一个字符串,而不是一个数字,所以你现在不能做str+2.0
任何类似的数学运算。这意味着当您想要输出/显示结果时必须进行格式化。
您可以做的另一件事是将双精度数舍入到小数点后 2 位:
double y = Math.round(x * 100.0) / 100.0;
结果仍将具有完全精度,但该Math.round()
函数会将数字四舍五入为最接近的整数。因此,如果我一开始是x=10.3494;
(它总是完全精确,实际上x
是10.34940000...
),那么y
现在是10.3500000...
。
推荐阅读
- reporting-services - 组页脚范围是否不包括详细信息行?
- c - Storing a string of words in a data structure
- node.js - 单元测试 Duo 安全“Duo 验证”
- sql - 在 SQL Server 中使用 UNION 时出错
- maven - Jmeter(maven) 不在 jenkins 上运行,而是在本地运行
- python - 如何通过类 python 3 更新字典
- amazon-web-services - 如何将 S3 数据加载到本地内存中,而不是保存到文件中
- javascript - 网格 Ext JS 中没有禁用行编辑?
- mysql - 左连接 3 个表错误 #1066
- java - 将节点客户端连接到maven服务器端