自定义舍入逻辑

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)}`));