自定义舍入逻辑
Custom Round off Logic
我想构建一个通过以下给定测试用例的舍入逻辑:
结果为 0.045 :4
结果为 0.955 :96
结果为 0.995 :100
结果为 0.01 :1
结果为 0.1 :10
结果为 0.175 :18
结果为 0.007 :1
结果为 0.818 :82
当前代码:
function roundOff(num) {
var ld = (num * 1000) % 100
if (ld >= 50) {
return (Math.ceil(num * 100));
} else {
return (Math.floor(num * 100));
}
}
document.write("Result for 0.045 :" + roundOff(0.045) + "<br>");
document.write("Result for 0.955 :" + roundOff(0.955) + "<br>");
document.write("Result for 0.995 :" + roundOff(0.995) + "<br>");
document.write("Result for 0.01 :" + roundOff(0.01) + "<br>");
document.write("Result for 0.1 :" + roundOff(0.1) + "<br>");
document.write("Result for 0.175 :" + roundOff(0.175) + "<br>");
document.write("Result for 0.007 :" + roundOff(0.007) + "<br>");
document.write("Result for 0.818 :" + roundOff(0.818) + "<br>");
目前最后两个结果没有按预期出现。我知道在最后两种情况下使用了不同的舍入,即。 0.007 应该 return 1 和 0.818 应该 return 82. 是否可以编写一个涵盖两者的逻辑?
let num_list = [
0.045, // 4
0.955, // 96
0.995, // 100
0.01, // 1
0.1, // 10
0.175, // 18
0.007, // 1
0.818, // 82
];
function roundOff(num) {
let ld = num * 1000;
const final = (_ld, _num) => {
if (_ld >= 50) {
return (Math.ceil(_num * 100));
} else {
return (Math.floor(_num * 100));
}
};
if (ld > 100 || ld < 10) {
/*
if the 1st ld is too big or too small, raise the digit forward 1 digi by * 10
0.818 * 1000 => 818
(818 > 100) => (818 * 10) % 100 = 80
(80 >= 50) Math.ceil(0.818 * 100) = 0.82
0.007 * 1000 => 7
(7 < 10) => (7 * 10) % 100 = 70
(70 >= 50) Math.ceil(0.007 * 100) = 1
*/
ld = (ld * 10) % 100;
return final(ld, num);
} else if (ld >= 10) {
ld = ld % 100;
return final(ld, num);
}
}
num_list.forEach(num => console.log(`${num} => ${roundOff(num)}`));
我想构建一个通过以下给定测试用例的舍入逻辑:
结果为 0.045 :4
结果为 0.955 :96
结果为 0.995 :100
结果为 0.01 :1
结果为 0.1 :10
结果为 0.175 :18
结果为 0.007 :1
结果为 0.818 :82
当前代码:
function roundOff(num) {
var ld = (num * 1000) % 100
if (ld >= 50) {
return (Math.ceil(num * 100));
} else {
return (Math.floor(num * 100));
}
}
document.write("Result for 0.045 :" + roundOff(0.045) + "<br>");
document.write("Result for 0.955 :" + roundOff(0.955) + "<br>");
document.write("Result for 0.995 :" + roundOff(0.995) + "<br>");
document.write("Result for 0.01 :" + roundOff(0.01) + "<br>");
document.write("Result for 0.1 :" + roundOff(0.1) + "<br>");
document.write("Result for 0.175 :" + roundOff(0.175) + "<br>");
document.write("Result for 0.007 :" + roundOff(0.007) + "<br>");
document.write("Result for 0.818 :" + roundOff(0.818) + "<br>");
目前最后两个结果没有按预期出现。我知道在最后两种情况下使用了不同的舍入,即。 0.007 应该 return 1 和 0.818 应该 return 82. 是否可以编写一个涵盖两者的逻辑?
let num_list = [
0.045, // 4
0.955, // 96
0.995, // 100
0.01, // 1
0.1, // 10
0.175, // 18
0.007, // 1
0.818, // 82
];
function roundOff(num) {
let ld = num * 1000;
const final = (_ld, _num) => {
if (_ld >= 50) {
return (Math.ceil(_num * 100));
} else {
return (Math.floor(_num * 100));
}
};
if (ld > 100 || ld < 10) {
/*
if the 1st ld is too big or too small, raise the digit forward 1 digi by * 10
0.818 * 1000 => 818
(818 > 100) => (818 * 10) % 100 = 80
(80 >= 50) Math.ceil(0.818 * 100) = 0.82
0.007 * 1000 => 7
(7 < 10) => (7 * 10) % 100 = 70
(70 >= 50) Math.ceil(0.007 * 100) = 1
*/
ld = (ld * 10) % 100;
return final(ld, num);
} else if (ld >= 10) {
ld = ld % 100;
return final(ld, num);
}
}
num_list.forEach(num => console.log(`${num} => ${roundOff(num)}`));