如何在十进制类型的结果中强制添加两位小数?

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.010.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; 开始(它始终是全精度,实际上x10.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)); 

【讨论】:

以上是关于如何在十进制类型的结果中强制添加两位小数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在.Net Core rest API响应中显示带两位小数的十进制数据类型

c语言如何让输出结果精确到两位小数

double类型,小数点后的位数

怎么使float保留两位小数或多位小数

C#中的decimal怎么保留两位小数

如何设置带两位小数的千位分隔符?