【问题标题】:VB "Financial.Pmt" equivalent in C#?C# 中的 VB“Financial.Pmt”等价物?
【发布时间】:2011-03-09 18:52:43
【问题描述】:

Microsoft.VisualBasic 程序集有一个内置函数。我可以像这样在 VB 中使用它:

Financial.Pmt((dAPR / 100) / 12, iNumberOfPayments, dLoanAmount) * -1

我当前的项目是 C#,我需要使用这个函数。网上的答案说只需添加命名空间和程序集并在 C# 中使用相同的内容 - 但事实并非如此! C# 仍然无法识别这个公式。

那么我如何在 C# 中使用使用 Financial.Pmt(或者甚至将源代码移植到它)?感谢您的帮助。

【问题讨论】:

  • 编译时遇到什么错误?
  • .NET 3.5 的 C# 不支持可选参数,因此您还需要指定两个可选参数。在任何情况下,您都不需要取 12 次方根来计算每月利息,该利息将复合到给定的年利率,而不仅仅是除以 12?
  • 您可以使用 RedGate Reflector 将 Microsoft.VisualBasic 程序集中的函数反编译为 C#。这相当简单 - 一些 if 和一些计算 - 但我不确定有人在此处复制/粘贴它是否合乎道德。

标签: c# .net asp.net vb.net .net-3.5


【解决方案1】:

像这样:

using System;
using Microsoft.VisualBasic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            double dAPR = 2;
            Int32 iNumberOfPayments = 12;
            double dLoanAmount = 10000;
            Console.WriteLine(Financial.Pmt((dAPR / 100) / 12, iNumberOfPayments, dLoanAmount, 0, DueDate.EndOfPeriod) * -1);
            Console.ReadLine();
        }
    }
}
  • Joel says 一样,添加对Microsoft.VisualBasic 程序集的引用。
  • 就像 Rup 在评论中所说,您必须为第 4 和第 5 个参数提供默认值。

Do use Microsoft.VisualBasic from C# when appropriate。它是 .Net 中完全受支持的核心库,它包含一些有用的财务功能。

【讨论】:

  • 你最后做了什么?谢谢。
【解决方案2】:

对于那些不喜欢导入 VB 函数的人。这是 PMT 的纯 C# 代码

public static double PMT(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount)
{
    var rate = (double) yearlyInterestRate / 100 / 12;
    var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1;
    return (rate + (rate/denominator)) * loanAmount;
}

用法:

PMT(7, 360, 120000);
// Result: 798.36
PMT(4.5, 360, 137500.47);
// Result: 696.69
PMT(4.13, 360, 61520);
// Result: 298.33
PMT(6.38, 360, 89200);
// Result: 556.78

【讨论】:

  • 如果我在 excel 中尝试 PMT(7, 360, 120000) 它返回 840,000。是否还有其他步骤来获得正确的值?
  • Excel 的 PMT 第一个参数 (rate) 写为十进制数和月费率。因此,从第一个和第二个示例中,“正确”的 Excel 公式分别为:=PMT(0.07/12, 360, 120000)=PMT(0.045/12, 360, 137500.47)
  • :-) 实际上 Microsoft.VisualBasic.dll 是用 C# 编写的 :-) referencesource.microsoft.com/#Microsoft.VisualBasic/Microsoft/…
【解决方案3】:

如前所述,您可以使用提供大量 VB6 功能的 Microsoft.VisualBasic 程序集。但老实说,如果您更一般地查看财务计算,您应该考虑查看Excel Financial Functions for .NET

更新: 该库可以通过 NuGet 安装

PM> Install-Package ExcelFinancialFunctions

【讨论】:

  • 这是来自 Code Galleries 的不受支持的单人乐队库。我需要一个强有力的论据来更喜欢使用它而不是 .NET 框架中完全支持的核心库,无论它存在于什么 DLL 中。该库中是否有许多不在 Microsoft.VisualBasic 中的财务计算?
  • @NoChance,该博客文章似乎引用了与答案中链接的相同库。该库的链接已失效,我更新了答案中的链接以指向该项目的 GitHub 存储库。我希望这会有所帮助。
  • 感谢您的跟进。我注意到图书馆链接已更改。感兴趣的读者也可以看看博客:ricardocovo.com/2013/01/14/financial-functions-in-net-c
【解决方案4】:

您必须在 Visual Studio 中为您的项目添加对 Microsoft.VisualBasic.dll 程序集的引用。这与源文件顶部的using Microsoft.VisualBasic; 指令相同。您必须执行这两个步骤。

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2015-11-02
    • 1970-01-01
    • 2011-03-18
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多