将财务功能从vb.net转换为C#

时间:2017-05-16 21:37:48

标签: c# vb.net

我在VB.net中有这行代码:

 PrincipalPayment = System.Math.Ceiling(FormatNumber(-PPmt(lRate / 1200, i, lTerm, lStartLoanBalance), 3) * 100) / 100

我需要将它转换为C#,所以我像这样转换并包含

using Microsoft.VisualBasic;

PrincipalPayment = System.Math.Ceiling(
    Convert.ToDouble((Convert.ToInt32(
        Strings.FormatNumber(
            -Financial.PPmt(lRate / 1200, i, lTerm, lStartLoanBalance), 3)) * 100) / 100));

但是我收到了这个错误:

  

输入字符串的格式不正确。

2 个答案:

答案 0 :(得分:1)

让我们尝试通过拉开嵌套表达式来理解原始代码的作用:

rppmt = PPmt(lRate / 1200, i, lTerm, lStartLoanBalance)
rfnum = FormatNumber(-rppmt, 3)
PrincipalPayment = System.Math.Ceiling(rfnum * 100) / 100

根据MSDN,PPmt()需要一堆双精度数,并返回一个双精度数; FormatNumber()接受一个epression(对象)和小数点后的位数(int),并返回一个字符串; Ceiling()将获得一个double,并返回一个double。

这应该是足够的信息,以了解哪些类型转换应用于何处; C#可能隐含地完成了大部分内容。你使用Convert.ToInt32()但我相信它不合适;以下应该足够了:

double PrincipalPayment(int lRate, int i, int lTerm, double lStartLoanBalance)
{
    var rppmt = Microsoft.VisualBasic.Financial.PPmt(lRate / 1200, i, lTerm, lStartLoanBalance);
    var rfnum = Microsoft.VisualBasic.Strings.FormatNumber(-rppmt, 3);
    return System.Math.Ceiling(Double.Parse(rfnum) * 100.0) / 100.0;
}

这是否可以改善,我作为锻炼留给别人。 :)

答案 1 :(得分:0)

使用此:

public static double PrincipalPayment(double lRate, int i, int lTerm, double lStartLoanBalance)
{
     var rppmt = Microsoft.VisualBasic.Financial.PPmt(lRate / 1200, i, lTerm, lStartLoanBalance);
     var rfnum = Microsoft.VisualBasic.Strings.FormatNumber(-rppmt, 3);
     return System.Math.Ceiling(Double.Parse(rfnum) * 100.0) / 100.0;
}