C# 计算发票总额的正确方法是什么?

C# 计算发票总额的正确方法是什么?,c#,rounding,C#,Rounding,这里有一个现实世界的问题:如果我有一个单价为25.8848美元的产品a,我订购了77个单位,那么我应该如何计算小计和总计 实际上,我对舍入问题感到困惑。我编写的代码如下: Math.Round(item.Price, 2) * item.Qty 这应该给我正确的小计和其他项目的总和将提供给我正确的总数。上述代码四舍五入是否正确?还是应该这样做: Math.Round(item.Price * item.Qty, 2) 我只是想知道小计价格舍入在现实世界中是如何实现的。舍入应该应用于每一行项目

这里有一个现实世界的问题:如果我有一个单价为25.8848美元的产品a,我订购了77个单位,那么我应该如何计算小计和总计

实际上,我对舍入问题感到困惑。我编写的代码如下:

Math.Round(item.Price, 2) * item.Qty
这应该给我正确的小计和其他项目的总和将提供给我正确的总数。上述代码四舍五入是否正确?还是应该这样做:

Math.Round(item.Price * item.Qty, 2)

我只是想知道小计价格舍入在现实世界中是如何实现的。

舍入应该应用于每一行项目,这样您发布的第二种方法才是正确的。各行项目小计应四舍五入。这里是一个例子,虽然它是用ruby编码的,但是你可以得到这个想法


就C而言,任何一种方法都是正确的。这确实是一个关于贵公司会计和业务规则的问题。理想情况下,这将在设计应用程序时在需求文档中定义


也就是说,我通常认为第二个选项是正确的,在价格乘以数量后进行四舍五入。

通常公司对此有规定。大多数人会对结果进行四舍五入,而不是对价格进行四舍五入——这使得存储超过2位小数的价格变得毫无意义。只能在显示最终结果时进行舍入,而不是每次计算时进行舍入。另一个建议是,对Price属性使用“decimal”数据类型以确保准确性。不要使用“双精度”。只要查看这里的帖子,我想他们是在确认产品价格舍入