javascript - Number.toFixed 函数中的舍入如何工作?

标签 javascript java node.js

我正在用 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/

相关文章:

java - 使用 sunpkcs#11 和 tomcat 移除和插入智能卡

javascript - 表达 js 流行为

javascript - 我可以在一个托管服务中托管我的前端,而在其他地方托管后端吗?

node.js - neo4j 如果 Node 属性不匹配则创建 Node

javascript - 导入一个函数是否需要加载整个库?

javascript - 异常 : The blob format is unsupported. Google 应用程序脚本

javascript - Rxjs ReplaySubject 在发出之前用 'null' 值初始化 - Angular 7

javascript - 将值插入 div 参数

java - JDBC4Connection 中的内存泄漏

Java 和 Heritrix 3.1.x : Web Content parsing?