我在 ASP.NET MVC 中有一个发票页面。
我正在计算商品及服务税。
在 javascript 中,这是结果。
165.45 * 0.1 = 16.544999999999998
在 C# 中我得到
165.45 * 0.1 = 16.545
这些轮次不同
我想将两者四舍五入到小数点后两位,但他们给出了不同的答案
JavaScript = 16.54
C# = 16.55 这就是我想要的。
有什么想法如何让它们相同吗?
在 C# 中,如果您使用double
, 你是not实际上得到 16.55 - 它可能会打印出来,但这不是真正的值。在这两种情况下,您都应该使用基于十进制的类型而不是基于二进制的类型。在 C# 中这很简单 - 你可以使用decimal
(aka System.Decimal
) 类型。不幸的是,我不知道 JavaScript 中是否有等效的东西。
你可能应该阅读二进制浮点数 http://csharpindepth.com/Articles/General/FloatingPoint.aspx and 十进制浮点数 http://csharpindepth.com/Articles/Decimal.aspx了解为什么这很重要。 (这些是专注于 .NET 的文章,但原则也适用于 JS。)
对于货币值,避免出现这种问题的一种方法是使用整数开始 - 将便士(美分,等等)的数量保留在您的值中,然后通过写出来显示它(number / 100) + "." + (number % 100)
(如有必要,使用不同的小数点分隔符)。我强烈怀疑您会发现这是针对这种特定情况获得一致且可预测的结果的最佳方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)