gpt4 book ai didi

JavaScript 数学,四舍五入到小数点后两位

转载 作者:IT老高 更新时间:2023-10-28 11:02:35 25 4
gpt4 key购买 nike

我有以下 JavaScript 语法:

var discount = Math.round(100 - (price / listprice) * 100);

四舍五入为整数。如何返回两位小数的结果?

最佳答案

注意 - 如果 3 位精度很重要,请参阅编辑 4

var discount = (price / listprice).toFixed(2);

toFixed 将根据超过 2 位小数的值向上或向下舍入。

示例:http://jsfiddle.net/calder12/tv9HY/

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

编辑 - 正如其他人所提到的,这会将结果转换为字符串。为避免这种情况:

var discount = +((price / listprice).toFixed(2));

编辑 2- 正如评论中还提到的,此函数在某些精度上会失败,例如,在 1.005 的情况下,它将返回 1.00 而不是 1.01。如果这种程度的准确性很重要,我找到了这个答案:https://stackoverflow.com/a/32605063/1726511这似乎适用于我尝试过的所有测试。

虽然需要做一个小的修改,上面链接的答案中的函数在四舍五入时返回整数,因此例如 99.004 将返回 99 而不是 99.00,这不适合显示价格。

编辑 3 - 似乎 toFixed 在实际返回上仍然搞砸了一些数字,这个最终编辑似乎有效。哎呀,这么多返工!

var discount = roundTo((price / listprice), 2);

function roundTo(n, digits) {
if (digits === undefined) {
digits = 0;
}

var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
var test =(Math.round(n) / multiplicator);
return +(test.toFixed(digits));
}

在此处查看 fiddle 示例:https://jsfiddle.net/calder12/3Lbhfy5s/

编辑 4 - 你们要杀了我。编辑 3 在负数上失败,没有深入研究为什么在进行舍入之前将负数变为正数会更容易,然后在返回结果之前将其返回。

function roundTo(n, digits) {
var negative = false;
if (digits === undefined) {
digits = 0;
}
if (n < 0) {
negative = true;
n = n * -1;
}
var multiplicator = Math.pow(10, digits);
n = parseFloat((n * multiplicator).toFixed(11));
n = (Math.round(n) / multiplicator).toFixed(digits);
if (negative) {
n = (n * -1).toFixed(digits);
}
return n;
}

fiddle :https://jsfiddle.net/3Lbhfy5s/79/

关于JavaScript 数学,四舍五入到小数点后两位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15762768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com