- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我们的 ASP.NET4 Web 应用程序中有一个利率计算器类,它使用 Microsoft.VisualBasic.Financial.Rate 来计算名义利率(基于输入参数)。
我们注意到,对于较高的 NPer 值(付款期总数,例如 50 年 x 每月付款 = 600),该函数会抛出异常:无法使用提供的参数计算费率。
到处搜索没有找到任何解决方案,所以我在这里发布解决方案。我们的要求是维护一个尽可能实现与上述相同算法的函数,因为我们需要产生完全相同的输出。
最佳答案
回答我自己的问题,对于任何遇到此问题的 future 编码人员 - 我们使用 dotPeek 反编译该模块,产生以下内容:
public static double Rate(double NPer, double Pmt, double PV, double FV = 0.0, DueDate Due = DueDate.EndOfPeriod, double Guess = 0.1)
{
if (NPer <= 0.0)
throw new ArgumentException(Utils.GetResourceString("Rate_NPerMustBeGTZero"));
double Rate1 = Guess;
double num1 = Financial.LEvalRate(Rate1, NPer, Pmt, PV, FV, Due);
double Rate2 = num1 <= 0.0 ? Rate1 * 2.0 : Rate1 / 2.0;
double num2 = Financial.LEvalRate(Rate2, NPer, Pmt, PV, FV, Due);
int num3 = 0;
do
{
if (num2 == num1)
{
if (Rate2 > Rate1)
Rate1 -= 1E-05;
else
Rate1 -= -1E-05;
num1 = Financial.LEvalRate(Rate1, NPer, Pmt, PV, FV, Due);
if (num2 == num1)
throw new ArgumentException(Utils.GetResourceString("Financial_CalcDivByZero"));
}
double Rate3 = Rate2 - (Rate2 - Rate1) * num2 / (num2 - num1);
double num4 = Financial.LEvalRate(Rate3, NPer, Pmt, PV, FV, Due);
if (Math.Abs(num4) < 1E-07)
return Rate3;
double num5 = num4;
num1 = num2;
num2 = num5;
double num6 = Rate3;
Rate1 = Rate2;
Rate2 = num6;
checked { ++num3; }
}
while (num3 <= 39);
throw new ArgumentException(Utils.GetResourceString("Financial_CannotCalculateRate"));
}
private static double LEvalRate(double Rate, double NPer, double Pmt, double PV, double dFv, DueDate Due)
{
if (Rate == 0.0)
return PV + Pmt * NPer + dFv;
double num1 = Math.Pow(Rate + 1.0, NPer);
double num2 = Due == DueDate.EndOfPeriod ? 1.0 : 1.0 + Rate;
return PV * num1 + Pmt * num2 * (num1 - 1.0) / Rate + dFv;
}
我们可以看到,如果超过 num3,就会抛出错误,因为它的硬限制为 39。我们稍微整理了一下代码,并将限制增加到 100:
private static double CalculateUpfrontNominalRate(double numberOfPeriods, double payment, double presentValue, double futureValue = 0.0, DueDate Due = DueDate.EndOfPeriod, double Guess = 0.1)
{
if (numberOfPeriods <= 0.0)
{
throw new ArgumentException("CalculateUpfrontNominalRate: Number of periods must be greater than zero");
}
var rateUpperBoundary = Guess;
var lEvalRate1 = LEvalRate(rateUpperBoundary, numberOfPeriods, payment, presentValue, futureValue, Due);
var rateLowerBoundary = lEvalRate1 <= 0.0 ? rateUpperBoundary * 2.0 : rateUpperBoundary / 2.0;
var lEvalRate2 = LEvalRate(rateLowerBoundary, numberOfPeriods, payment, presentValue, futureValue, Due);
for (var i = 0; i < 100; i++)
{
if (lEvalRate2 == lEvalRate1)
{
if (rateLowerBoundary > rateUpperBoundary)
rateUpperBoundary -= 1E-05;
else
rateUpperBoundary -= -1E-05;
lEvalRate1 = LEvalRate(rateUpperBoundary, numberOfPeriods, payment, presentValue, futureValue, Due);
if (lEvalRate2 == lEvalRate1)
{
throw new ArgumentException("CalculateUpfrontNominalRate: Inputs will cause a divsion by zero");
}
}
double temporaryRate = rateLowerBoundary - (rateLowerBoundary - rateUpperBoundary) * lEvalRate2 / (lEvalRate2 - lEvalRate1);
double lEvalRate3 = LEvalRate(temporaryRate, numberOfPeriods, payment, presentValue, futureValue, Due);
if (Math.Abs(lEvalRate3) < 1E-07)
{
return temporaryRate;
}
lEvalRate1 = lEvalRate2;
lEvalRate2 = lEvalRate3;
rateUpperBoundary = rateLowerBoundary;
rateLowerBoundary = temporaryRate;
}
throw new ArgumentException("CalculateUpfrontNominalRate: The maximum number of iterations has been exceeded, unable to calculate rate");
}
private static double LEvalRate(double Rate, double NPer, double Pmt, double PV, double dFv, DueDate Due)
{
if (Rate == 0.0)
return PV + Pmt * NPer + dFv;
double num1 = Math.Pow(Rate + 1.0, NPer);
double num2 = Due == DueDate.EndOfPeriod ? 1.0 : 1.0 + Rate;
return PV * num1 + Pmt * num2 * (num1 - 1.0) / Rate + dFv;
}
关于asp.net - Microsoft.VisualBasic.Financial.Rate 错误, "Cannot calculate rate using the arguments provided",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14576138/
SELECT username, (SUM(rating)/count(*)) as TheAverage, count(*) as TheCount FROM ratings WHERE month
通常我的计数器指标查询如下所示: rate(metric_total[5m]) rate(metric_total[$__interval]) 但是在查看使用 Prometheus 和 Grafana
@Override public void onPositiveButtonClicked(int value, @NotNull String comments) { Rating rati
我尝试创建一个自定义评级栏。我不使用 style 因为我只用过一次。因此,我在 drawable 文件夹中创建了一个 layer-list(它的名称是 custom_rating_bar.xml):
我尝试通过 Django 评级应用程序评级来排序一组模型对象。我在我看来构建了一个 order_by 函数,该函数工作正常,但当我进入评级字段时,我收到此错误:“评级值必须是评级实例,而不是'100”
更新:我输错了 2 个变量...太尴尬了。感谢大家的努力! 抱歉,我发现我为 2 个不同的环境输入了错误的值,第一个我设置了 sort = 0 和 rating=1 但后来在 irb 中我设置了 so
当我使用 Keras 定义模型时,大多数时候都会收到此警告。它似乎以某种方式来自 tensorflow: WARNING:tensorflow:From C:\Users\lenik\AppData\
我有一个二元分类问题,类别背景 (bg) = 0,信号 (sig) = 1,我正在为此训练神经网络。出于监控目的,我尝试在 Keras 中使用 TensorFlow 后端实现自定义指标,该指标执行以下
所以我们有如下电影评分关系数据库: mysql> select * from ratings; +-----+-----+------+ | uid | mid | rid | +-----+-
我正在使用 AVAudioRecorder。我以 44100 采样率以 caf 格式 录制音频。就记录成功了。录制后,我想转换已录制的 caf 采样率为 11025 和 22050 的音频文件。是否可
因此,我们的 ASP.NET4 Web 应用程序中有一个利率计算器类,它使用 Microsoft.VisualBasic.Financial.Rate 来计算名义利率(基于输入参数)。 我们注意到,对
我想用生成器构建一个数独游戏。我已经想出了在没有难度级别的情况下如何做的一切:简单、中等、困难。我的问题是根据难度级别我应该隐藏多少个数字?任何想法。 最佳答案 我很确定数独谜题的难度等级不是根据缺失
如何防止客户对产品进行多次评分?最好使用存储 IP 地址的 cookie,还是最好将用户评级存储在数据库中?我正在使用 MySQL 和 ColdFusion。 干杯! 最佳答案 如果您有用户帐户,请将
项目简介 rate-limit 是一个为 java 设计的渐进式限流工具. 目的是为了深入学习和使用限流,后续将会持续迭代. 特性 渐进式实现 。 支持独立于 spri
我们使用 spring-cloud-gateway 使用 RedisRateLimiter 进行速率限制。如果我们有一个按键来按每条路线进行速率限制,一切都可以立即使用。但是,我们有一个用例,其中针对
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 去年关闭。 Improve th
Lyft文档(https://developer.lyft.com/docs/rate-limits)中有一条信息,即“费率限制是全局的,并基于每个客户端ID强制执行。”。真的是这样吗? Lyft会根
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
引自普罗米修斯 Count and sum of observations文档: To calculate the average request duration during the last 5
引自普罗米修斯 Count and sum of observations文档: To calculate the average request duration during the last 5
我是一名优秀的程序员,十分优秀!