簡體   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