我看到在我朋友的电脑这个财务核算代码:0.0/0.0在C#中不会抛出“尝试除以零。”?
double Total = ...
double Paid = ...
double Wating_For_Details = ...
double Decuctibles = ...
double Rejected = ...
嗯,我看到了这一刻,我告诉他,double
在base 2
表示,并可以不代表全面的财务核算。改为使用decimal
。
很好。
但我改变它的两倍伊夫当下遇到:
Attempted to divide by zero.
吧?
显然 - 使用double
,与0.0
将当它不抛出异常:
但返回NAN
。
虽然我的代码(使用decimal
)不会抛出异常(当Total
是zero
)
于是我问:
我检查0.0==0
,它返回true。所以为什么我没有得到例外,但NAN
?我知道那应该是怎么回事,但是当把零除以零时,不会抛出异常的常见感觉在哪里?
“我检查过了'0.0 == 0'” - 你觉得那个实际检查了什么?两边的操作数都是不相等的类型,但是存在一个隐式的'int'到'double'的转换 - 所以你实际检查的是'0.0 == 0.0'。 –
另外,你的问题有点像是抛出一个异常很显然是在这种情况下做的正确的事情 - 在计算世界中存在许多权衡,并且往往没有单一的“正确”方式来做事情。 –
类似于http://stackoverflow.com/questions/4609698/inconsistency-in-divide-by-zero-behavior-between-different-value-types(即使不完全重复) – bigge