繁体   English   中英

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

[英]Convert financial function from vb.net to C#

我在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));

但我收到此错误:

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

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

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

根据MSDN,PPmt()接受一堆双打,并返回一个双打; FormatNumber()接受一个表达式(对象)和小数点后的位数(整数),并返回一个字符串; Ceiling()将获得一个双精度值,并返回一个双精度值。

那应该是足够的信息,以知道在哪里使用哪种类型的转换。 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;
}

是否可以改善这一点,我作为练习留给他人。 :)

用这个 :

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM