如何在十进制类型的结果中强制添加两位小数?
Posted
技术标签:
【中文标题】如何在十进制类型的结果中强制添加两位小数?【英文标题】:How to compulsorily add two decimals in result of type decimal? 【发布时间】:2020-06-04 04:12:03 【问题描述】: 结果必须有两位小数(例如:10.56、34.56)。 在我的例子中:10.0 应该是 10.00,10.5 应该是 10.50,10.3494 应该是 10.35。【问题讨论】:
请编辑您的问题以将您的版本包含在DecimalFormat
中。
所以你从你身边做了什么。你能分享一下吗?
@soorapadman 我在下面分享了解决方案 (***.com/a/62195260/6508381)。
【参考方案1】:
Java(和大多数语言)中的decimal
数字将始终具有完全精度。 Java 没有 10.0
和 10.00
是不同事物的概念。所以如果我写:
double x = 10.0;
那么x
其实就是10.0000000000000....
(精确精度的细节是surprisingly complicated,并且很大程度上无关紧要,所以我不会在这里详细介绍,但对于日常使用来说已经绰绰有余了。)
你可以做的是显示一个double作为字符串,四舍五入到小数点后2位,像这样:
String str = String.format(".2f", x);
在这种情况下,str
将是 "10.00"
。 String.format()
还有很多其他选择,我建议你search for examples!请注意,结果是字符串,而不是数字,因此您现在不能执行 str+2.0
或任何类似的数学运算。这意味着当您想要输出/显示结果时必须进行格式化。
你可以做的另一件事是四舍五入双位到小数点后两位:
double y = Math.round(x * 100.0) / 100.0;
结果仍将具有完全精度,但Math.round()
函数会将数字四舍五入为最接近的整数。因此,如果我从x=10.3494;
开始(它始终是全精度,实际上x
是10.34940000...
),那么y
现在将是10.3500000...
。
【讨论】:
根据BigDecimal.equals
,10.0 和 10.00不相等。
说“它很复杂”而不给出任何进一步的提示或至少一个链接是令人沮丧的。
BigDecimal
是另外一锅鱼——超出了我的回复范围!已采纳其他反馈。【参考方案2】:
如果字符串格式的固定精度足以满足您的需要,只需使用 num.toFixed(2)
在您的情况下 10.3494 变为“10.35”。
【讨论】:
【参考方案3】:这段代码对我有用!
public static void main(String[] args) throws Exception
String Input="75.74306816000052";
String Input2 = "26.9";
BigDecimal Output= new BigDecimal(Input).setScale(2, RoundingMode.HALF_EVEN);
System.out.println(Output.setScale(2));
BigDecimal Output2= new BigDecimal(Input2).setScale(2, RoundingMode.HALF_EVEN);
System.out.println(Output2.setScale(2));
【讨论】:
以上是关于如何在十进制类型的结果中强制添加两位小数?的主要内容,如果未能解决你的问题,请参考以下文章