JavaScript 中的 toFixed() 和 Java 中的 DecimalFormat 之间的冲突

Conflicts between toFixed() in JavaScript and DecimalFormat in Java

本文关键字:中的 DecimalFormat 之间 冲突 Java toFixed JavaScript      更新时间:2023-09-26

我有一个数字 10.625

在 JavaScript 中

10.625.toFixed(2)  //gives 10.63

在爪哇,

Double.valueOf(new DecimalFormat("###.##").format(Double.valueOf("10.625"))) //gives 10.62

如何在客户端和服务器端实现唯一的输出?

这将打印 10.63,转换回 Double 将基于此值。

DecimalFormat df = new DecimalFormat("###.##");
df.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(df.format(Double.valueOf("10.625")));

协调客户端和服务器上数字视图的方法是在服务器上进行处理,并让客户端显示服务器发送的内容。

在服务器上使用 Java 版本,转换为 String ,然后将其发送到客户端。然后,您只需进行一次转换,并且不会发生冲突。

毕竟,客户端只是应该很好地查看服务器所做的事情。在客户端上重复计算不是考虑它的正确方法。

你可以将Math.round(value * 100) / 100用于java和javascript。

     BigDecimal bd = new BigDecimal("10.625");
    bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);  
    double value = Double.parseDouble(new DecimalFormat(".##").format(bd));
    System.out.println(value);

还将打印 10.63

要捕获的一些重要信息:

  • 由于您永远不想知道.之前有多少位数,因此您可以简单地使用.##
  • DecimalFormat ==> .## 格式将打印0.x00.x,而"0.00"格式将打印0.x00.x0 所以我更喜欢第二种格式