我正在用 Java 编写 API,代码的行为应该像用 Node 编写的另一个微服务一样。
用Node编写的有问题的部分是这样的:
const totalValue = // this value comes from a query
const risk = // it is a percentage value from another query
const riskValue = totalValue * (risk / 100);
const available = +(totalValue - riskValue).toFixed(2);
return available;
经过几次测试后,我这样编写了 Java API:
BigDecimal totalValue = ...
BigDecimal risk = ...
BigDecimal riskValue = totalValue.multiply(risk.divide(new BigDecimal(100)));
BigDecimal available = totalValue.subtract(riskValue).setScale(2, RoundingMode.HALF_DOWN));
几天后第一个错误:
totalValue = 62822.65
risk = 10
Node 返回:
56540.385.toFixed(2); // "56540.39"
这个具体数字并没有像我预期的那样在我的 Java API 中四舍五入。
但是,这个数字四舍五入:
56540.395.toFixed(2); // "56540.39"
<小时/>
JavaScript Number.toFixed(2)
背后的逻辑是什么?
如何在 Java 中复制此函数行为?
提前致谢。
最佳答案
我不确定我是否完全理解你的问题。如果您的问题是如何将 double
数字四舍五入到 2
小数位,您可以按如下方式执行:
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
double n1 = 56540.385;
BigDecimal rounded1 = BigDecimal.valueOf(n1).setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded1);
double n2 = 56540.395;
BigDecimal rounded2 = BigDecimal.valueOf(n2).setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded2);
}
}
输出
56540.39
56540.40
如果您正在寻求其他方面的帮助,请随时发表评论。
关于javascript - Number.toFixed 函数中的舍入如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61130477/