c# - "For money, always decimal"?

标签 c# vb.net types finance financial

好吧,“为了钱,总是小数”的规则在 Microsoft 开发团队内部没有应用,因为如果它是:

Namespace: Microsoft.VisualBasic
Assembly:  Microsoft.VisualBasic (in Microsoft.VisualBasic.dll)

Financial.IPmt 和所有其他方法将接收/返回 decimal 而不是 double

现在我想知道我是否可以使用这些方法而不用担心舍入错误?

我应该使用其他一些图书馆来处理财务问题吗?如果是的话,你能给我一些好的(用于 C# 的)吗?

最佳答案

对货币使用decimal 的规则很有用,因为大多数货币都有小数单位。通过使用小数运算,您可以避免引入和累积舍入误差。

Financial Class functions使用 float 有几个原因:

  • 它们不会在内部累积 - 它们基于封闭形式的指数/对数计算,而不是周期内的迭代和求和。
  • 他们往往不使用或生成精确的十进制值。例如,精确的小数年利率除以 12 个月的还款额就变成了循环小数。
  • 它们主要用于决策支持,最终对实际簿记几乎没有适用性。

Pmt 和四舍五入可以确定名义上的每月付款,但是一旦确定了该金额,余额累积 - 付款、应用的利息费用等 - 以 decimal。此外,延迟或预付款、付款假期和其他此类不一致将使财务职能提供的预计摊销无效。

关于c# - "For money, always decimal"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604003/

相关文章:

mysql - TIMESTAMPDIFF 格式转换(小时和分钟)

scala - 访问惰性 val 的类型会导致它被评估吗?

c# - SharePoint 2010,使用 C# 进行反射

c# - 在 ASP.NET MVC (3.0/Razor) 中,您更喜欢多个 View 还是 View 中的条件?为什么?

c# - MVC 5 Razor Url.Content(空)

vb.net - 从 SSIS 上的脚本任务执行时,Oracle 过程不返回结果

c# - 使用 BasicHttpBinding 进行 WCF 自定义证书验证

mysql - 组合框未填充 mysql 数据

haskell - 在 GHC.TypeLits 中 someNatVal 有什么用处(我们不能用 natVal 完成)?