好的,所以我遇到了很多关于JavaScript Number
和C#decimal
的问题,彼此并不是特别好,所以我决定制作一个更复杂的中间噱头:< / p>
class Decimal {
constructor(value, decimalPlaces = 2) {
this.value = value;
this.decimalPlaces = decimalPlaces;
}
valueOf() {
let pow = Math.pow(10, this.decimalPlaces);
let retv = Math.round(this.value * pow) / pow;
return retv;
}
toString() {
return this.value.toFixed(this.decimalPlaces);
}
toJSON() {
return this.valueOf();
}
}
所以我可以
let price = new Decimal(200 - 199.99, 2)
它工作正常,即使在序列化时:
let foo = { price: price; }
这将序列化为
{ price: 0.01 }
正如所料。
这里的问题是
如果我们执行price = 10
或price = someNumberVariable
,我们将失去此类的全能舍入权力,因为现在价格是数字类型。
问题是
是否有可能覆盖赋值运算符,以便用户代码上的price = someNumberValue;
实际上price.value = someNumberValue
在引擎盖下,以保持自动舍入魔法的继续?
或者甚至更好,是否有任何原生的javascript东西以我更容易的方式做我想要的事情,我可能碰巧不知道?