javascript和VB.net返回不正确的结果

Cre*_*ief 1 javascript vb.net .net-2.0

我们注意到这种情况在javascript和VB.net 2.0中同时发生.所以基本上在服务器端和客户端代码.

基本上如果您运行此公式975328 - 153279.43,您将得到以下答案822048.57000000007.

但是,如果您运行975328 - 153279.4,975328 - 153279.433或975328 - 153279.5,则所有内容都将正确返回.

任何想法必须为什么系统计算975328 - 153279.43与11位小数的答案?更不用说在第11个小数位添加7,从而使方程回答不正确.

当然我知道我可以修剪,设置适当的小数位等等的答案,但我们更感兴趣的是知道为什么它会返回这样的答案.

请记住,只需将方程式输入到immidiate窗口中即可证明以上内容,从而消除了诸如对象类型等的变量等.

谢谢你的帮助,肯

Joe*_*orn 5

出于同样的原因,您无法准确地将1/3表示为小数(基数为10).您可以在基数10中输入数字,但所有算术都在基数2(二进制)中进行.因此,必须首先将基数10值转换为基数2,并且如果甚至可以准确地表示二进制数,则最终可能需要更多位来表示它,而不是用于标准双精度型.

调查此错误的另一个常见数字是.1.转换为二进制时,带小数的任何十进制数在小数点后永远重复.因此,没有办法准确地表达二进制值.

在VB.Net中,你至少可以使用Decimal类型来处理这种事情.它的速度要快得多,但它应该准确地处理这种计算.我不确定javascript解决方案是什么.