c# - 为什么我得到 NaN?

标签 c#

我正在检查我的代码,每次 D1 最终都是 NaN。代码对我来说看起来不错,但我完全被难住了......

double D1;
Data Data = new Data();

PriceSpot = 40;
Data.PriceStrike = 40;
Data.RateInterest = .03;
Data.Volatility = .3;
Data.ExpriationDays = 300;

D1 = 
    (
        Math.Log(PriceSpot/Data.PriceStrike) +
        (
            (Data.RateInterest + (Math.Pow(Data.Volatility,2)/2)) *
            (Data.ExpirationDays/365)
        )
    ) /
    (
        Data.Volatility *
        Math.Pow(Data.ExpirationDays/365,.5)
    );

最佳答案

Data.Volatility * Math.Pow(Data.ExpirationDays/365,.5) 为 0,因为 300/365 因为 int 等于 0

假设 ExpriationDays 属性确实是 int 类型,它会使整个表达式为 0。

例如:

[Test]
public void Test()
{
    var val = 300 / 365;

    Assert.That(val, Is.EqualTo(0));
}

一些关于除以 0 的评论:

当将两个 0 整数相除时会在运行时抛出异常:

[Test]
public void TestIntDiv()
{
    int zero = 0;
    int val;

    Assert.Throws<DivideByZeroException>(() => val = 0 / zero);
}

当除以两个 0 double 时,结果将为 NaN,并且不会抛出异常:

[Test]
public void TestDoubleDiv()
{
    double zero = 0;
    double val = 0 / zero;

    Assert.That(val, Is.NaN);
}

关于c# - 为什么我得到 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3373145/

相关文章:

c# - 创建 Windows 8 应用程序时保存页面之间的状态

c# - 当应用程序退出时,如何等待我的异步操作完成?

javascript - 获取客户的一些身份信息

c# - 是否有针对具有外部 set/get 方法的强类型类成员的 C# 模式?

C# 类继承

C# Double.ToString()

c# - 使用百分号在 DataTable 中添加计算列的表达式

c# - 我的项目和 ASP 页面中的用户控件?

c# - Wordpress REST API - 发送重置密码链接

c# - 如何使这些结构函数通用?