浮点数后如何更改数字的长度

时间:2019-04-17 14:28:58

标签: javascript

所以,我有一个对象。

var position = {
  x: 1,
  y: 0
}

经过几次运算后,x或y可以变成0.3700000000000001。但是,我需要将其设置为0.37。我尝试过:

position[x].toFixed(2)

摆脱00000000000001的正确方法是什么?

4 个答案:

答案 0 :(得分:0)

除了使用字符串键或 dot 表示法,应该没有任何问题:

var position = {
  x: 0.3700000000000001,
  y: 0
}
position.x = +position.x.toFixed(2); // + converts the resulted string to number
console.log(position.x);

答案 1 :(得分:0)

position[x]将获得位置对象的属性,该属性将等于值变量x 。您应该使用position.x

您还需要更改position.x的值,因为position.x.toFixed(2)不会更改该值。

position.x = position.x.toFixed(2)

toFixed()返回一个string。您应该使用+将其转换为再次浮动。

console.log(+(0.3700000000000001). toFixed(2))

答案 2 :(得分:0)

如果您想要一个数字,则无法丢弃00000000000001来获得0.37。与其他语言一样(大多数硬件支持IEEE 754),数字0.37不存在。如果扫描0.37,则四舍五入到最接近的可能数字:0.37.toPrecision(18)显示"0.369999999999999996"

因此,toFixed()返回字符串而不是数字。因此,使用toFixed()并将结果转换回浮点数是毫无意义的。

最简单的解决方案是使用这些 unexact 值并将toFixed()仅用于输出(即toFixed()的想法)。

另一个解决方案,例如货币是,将所有值存储为美分/便士,仅在输出上将值除以100:($cent/100).toFixed(2)

答案 3 :(得分:-1)

您正在获取值,但没有存储它,因此原始vulea不会更改。您需要这样做:

func methodTwo() {
     methodFour()
     methodThree()
}

func testMethodFour() {
     methodFour()
     // check assumptions
}

func methodFour() {
     // code that you originally had in methodTwo before methodThree
}