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