【问题标题】: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 我在下面分享了解决方案 (stackoverflow.com/a/62195260/6508381)。

标签: java number-formatting


【解决方案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)); }
      

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 2021-07-05
      相关资源
      最近更新 更多