gpt4 book ai didi

javascript - 使用附近的 0.05 的自定义舍入数字

转载 作者:行者123 更新时间:2023-11-30 11:06:44 24 4
gpt4 key购买 nike

我想像下面这样四舍五入数字,我在 6 个月前在堆栈溢出中问过这个问题,我得到了解决方案并且工作正常

12.910 - 12.90
12.920 - 12.90
12.930 - 12.90
12.940 - 12.90
12.941 - 12.95
12.950 - 12.95

12.960 - 12.95
12.970 - 12.95
12.980 - 12.95
12.990 - 12.95
12.991 - 13.00
13.000 - 13.00

但它不适用于以下数字

Input 32.34 - expected 32.30 - but got 32.35
Input 33.09 - expected 33.05 - but got 33.10

而其他数字如 33.34 、 23.34 给出正确的输出 33.30 和 23.30

这是函数

function customRound(num) {
intermediateResult = Math.ceil(num*100)/100;
return Math.floor(intermediateResult*20)/20;
}

最佳答案

我认为您想在执行 num * 100 后四舍五入到最接近的整数。现在,您将使用 Math.ceil.

四舍五入到下一个整数

尝试使用 Math.round .希望对您有所帮助:

更新:您还必须将 toFixedparseFloat 一起使用来解决乘法中的精度错误。

function customRound(num) {
intermediateResult = Math.round(parseFloat((num * 100).toFixed(2))) / 100;
return Math.floor(intermediateResult * 20) / 20;
}

console.log(customRound(32.34));
console.log(customRound(33.09));
console.log(customRound(67.445));
console.log(customRound(69.195));

如果要显示 2 位小数,请使用 toFixed连同 parseFloat像这样:parseFloat(Math.round(res * 100)/100).toFixed(2):

function customRound(num) {
intermediateResult = Math.round(parseFloat((num * 100).toFixed(2))) / 100;
const res = Math.floor(intermediateResult * 20) / 20;
return parseFloat(Math.round(res * 100) / 100).toFixed(2)
}

console.log(customRound(32.34));
console.log(customRound(33.09));
console.log(customRound(67.445));
console.log(customRound(57.244));


第二次更新:

function getIntString(num, factor = 1) {
return (num * factor + "").split('.')[0];
}

function customRound(num) {
const int = getIntString(num);
const decimal = (num + "").split('.')[1];
let precision;
if (decimal) {
if (decimal.length === 2) {
precision = decimal + 0;
} else {
precision = decimal.slice(0, 3);
}
} else {
return num;
}
const specificPrecision = precision.slice(1);
if (specificPrecision > 40 && specificPrecision < 91) {
precision = precision.slice(0, 1) + 50;
return parseFloat(`${int}.${precision}`);
} else if (specificPrecision >= 91) {
if (parseInt(precision.slice(0, 1)) === 9) {
return Math.ceil(num);
} else {
return (Math.floor(num * 10 + 1))/10;
}
} else {
return parseInt(getIntString(num, 10)) / 10;
}
}


const logResult = (inp) => `Input: ${inp}, Result: ${customRound(inp)}`;


console.log(logResult(18.095));
console.log(logResult(12.991));
console.log(logResult(12.191));
console.log(logResult(12.990));
console.log(logResult(12.910));
console.log(logResult(12.440));
console.log(logResult(12.441));
console.log(logResult(12.921));
console.log(logResult(67.445));
console.log(logResult(57.244));
console.log(logResult(58.344));
console.log(logResult(69.195));

关于javascript - 使用附近的 0.05 的自定义舍入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55304203/

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