我在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));
但是我收到了这个错误:
输入字符串的格式不正确。
答案 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;
}