我正在检查我的代码,每次 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/