broken toFixed implementation

后端 未结 6 2217
陌清茗
陌清茗 2020-11-27 21:51

The default implementation of javascript\'s \"Number.toFixed\" appears to be a bit broken.

console.log((8.555).toFixed(2));    // returns 8.56
console.log((         


        
6条回答
  •  鱼传尺愫
    2020-11-27 22:21

    A consistent solution would be to add a fixed tolerance (epsilon) to each number before rounding. It should be small, but not too small.

    For example, with an eps = 1e-9, this:

    console.log((8.555).toFixed(2));    // returns 8.56
    console.log((8.565).toFixed(2));    // returns 8.57
    console.log((8.575).toFixed(2));    // returns 8.57
    console.log((8.585).toFixed(2));    // returns 8.59
    

    Becomes this:

    console.log((8.555 + eps).toFixed(2));    // returns 8.56
    console.log((8.565 + eps).toFixed(2));    // returns 8.57
    console.log((8.575 + eps).toFixed(2));    // returns 8.58
    console.log((8.585 + eps).toFixed(2));    // returns 8.59
    

提交回复
热议问题