[英]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.