【发布时间】:2017-06-23 08:54:12
【问题描述】:
嗯,我在客户端遇到了舍入问题,然后在后端进行了验证,并且由于这个问题验证失败。这是上一个问题Javascript and C# rounding hell
所以我正在做的是:
在客户端:
I have 2 numbers: 50 and 2.3659
I multiply them: 50 * 2.3659 //118.29499999999999
Round to 2 decimal places: kendo.toString(50 * 2.3659, 'n2') //118.29
在后台(C#):
I am doing the same: 50 and 2.3659
I multiply them: 50 * 2.3659 //118.2950
Round to 2 decimal places: Math.Round(50 * 2.3659, 2) //118.30
验证失败。我可以在客户端做点什么吗?
【问题讨论】:
-
你知道floating math "is broken",对吧?
-
对,但问题是在这种情况下我能做什么?您是否建议我丢弃业务验证并提交不正确的结果?
-
将它们作为整数相乘,而不是作为浮点数。
50 * 23659- 然后移动你认为合适的小数点。然后你会在任何地方得到相同的结果。这并不理想,但它会起作用。 -
@Mistalis,不可能。
-
那么你最好的选择可能是一个库,它定义了一个实际的十进制类型或允许你对作为字符串的数字进行数学运算。
标签: javascript