2010-06-29 6 views
2

Il existe une fonction intégrée de l'assembly Microsoft.VisualBasic. Je peux l'utiliser en VB comme ceci:VB "Financial.Pmt" équivalent en C#?

Financial.Pmt((dAPR/100)/12, iNumberOfPayments, dLoanAmount) * -1 

Mon projet actuel est en C# et je dois utiliser cette fonction. Les réponses sur le web disent qu'il suffit d'ajouter l'espace de noms et l'assemblage et d'utiliser la même chose en C# - mais ce n'est pas vrai! C# ne reconnaît toujours pas cette formule.

Alors, comment puis-je utiliser utiliser Financial.Pmt en C# (ou peut-être même le portage du code source)? Merci pour toute aide.

+0

Quelle erreur que vous obtenez sur la compilation? – STO

+2

C# .NET 3.5 ne prend pas en charge les paramètres facultatifs, vous devrez donc également spécifier les deux paramètres facultatifs. Dans tous les cas, n'avez-vous pas besoin de prendre une douzième racine pour calculer l'intérêt mensuel qui s'ajoutera à un taux annuel donné, pas seulement diviser par 12? – Rup

+0

Vous pouvez utiliser RedGate Reflector pour décompiler la fonction en C# à partir de l'assembly Microsoft.VisualBasic. C'est assez simple - quelques ifs et quelques calculs - mais je ne suis pas sûr que ce soit éthique pour quelqu'un de le copier/coller ici pour vous. – Rup

Répondre

11

Comme ceci:

using System; 
using Microsoft.VisualBasic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      double dAPR = 2; 
      Int32 iNumberOfPayments = 12; 
      double dLoanAmount = 10000; 
      Console.WriteLine(Financial.Pmt((dAPR/100)/12, iNumberOfPayments, dLoanAmount, 0, DueDate.EndOfPeriod) * -1); 
      Console.ReadLine(); 
     } 
    } 
} 
  • Comme Joel says, ajoutez une référence à l'assemblée Microsoft.VisualBasic.
  • Comme Rup dit dans un commentaire, vous devez fournir les valeurs par défaut aux 4ème et 5ème arguments.

Do use Microsoft.VisualBasic from C# when appropriate. C'est une bibliothèque de base entièrement supportée dans .Net et elle contient quelques fonctions financières utiles.

1

Vous devez ajouter une référence à l'assembly Microsoft.VisualBasic.dll pour votre projet dans Visual Studio. C'est pas la même chose que la directive using Microsoft.VisualBasic; en haut de votre fichier source. Vous devez faire les deux étapes.

2

Comme déjà mentionné, vous pouvez utiliser l'assembly Microsoft.VisualBasic qui fournit beaucoup de la fonctionnalité VB6. Mais pour être honnête si vous regardez plus généralement les calculs financiers, vous devriez envisager de regarder Excel Financial functions for .NET.

+4

Il s'agit d'une bibliothèque non prise en charge par un seul homme de code provenant de Code Galleries. J'aurais besoin d'un argument fort pour préférer l'utiliser sur une bibliothèque de base entièrement prise en charge à partir du framework .NET, quelle que soit la DLL dans laquelle elle vit. Y a-t-il beaucoup de calcs financiers dans cette bibliothèque qui ne sont pas dans Microsoft.VisualBasic? – MarkJ

1

Pour ceux qui n'aiment pas importer les fonctions VB. Voici pur code C# pour VPM

public static double PMT(double yearlyInterestRate, int totalNumberOfMonths, double loanAmount) 
{ 
    var rate = (double) yearlyInterestRate/100/12; 
    var denominator = Math.Pow((1 + rate), totalNumberOfMonths) - 1; 
    return (rate + (rate/denominator)) * loanAmount; 
} 

Utilisation:

PMT(7, 360, 120000); 
// Result: 798.36 
PMT(4.5, 360, 137500.47); 
// Result: 696.69 
PMT(4.13, 360, 61520); 
// Result: 298.33 
PMT(6.38, 360, 89200); 
// Result: 556.78 
+0

si j'essaye PMT (7, 360, 120000) dans Excel il renvoie 840,000. Y at-il une autre étape impliquée pour obtenir la valeur correcte? – Haris

+0

Le premier paramètre 'PMT' d'Excel (' rate') est écrit comme un nombre décimal et un taux mensuel. Ainsi, à partir des premier et deuxième exemples, les formules Excel 'correctes' sont: '= PMT (0.07/12, 360, 120000)' et '= PMT (0.045/12, 360, 137500.47)', respectivement. – stack247

+1

:-) En fait Microsoft.VisualBasic.dll est écrit en C# :-) http://referencesource.microsoft.com/#Microsoft.VisualBasic/Microsoft/VisualBasic/Financial.cs – Markus