一次算术运算的结果的类型要取决于操作数的类型。例如,表达式 5.0 / 2.0
的值是 2.5;两个操作数的类型均为 double。在 C#中,带小数点的文字常量数字6肯定是
double 值,而不是 float 值,目的是保留尽可能高的精度。所以,结果的类型也是 double
然而,表达式
5 / 2 的结果值是 2。在这种情况下,两个操作数的类型均为 int,所以结果类
型也为
intC#在这种情况下总是对值进行向下取整。另外,假如混用不同的操作数类型,
那么情况会变得更加复杂。例如,表达式
5 / 2.0 中包含一个 int 值和一个 double 值。 C#
译器将检测到这种不一致的情况,并自动生成代码将
int 转换成 double,然后才执行计算。
所以,以上表达式的结果是一个
double (2.5)。然而,虽然这是一种有效的写法,但通常
不建议像这样混用数据类型。

数值类型和无穷大
C#语言中的数字,还有另外两个特性是我们必须了解的。例如,任何数除以 0 所得
的结果是无穷大,不在
intlong decimal 类型的范围内。所以,计算 5 / 0 之类的
表达式会出错。但是,
double float 类型实际上有一个可以表示无穷大的特殊值,
因此表达式
5.0 / 0.0 的值是 Infinity(无穷大)。这个规则的唯一例外是表达式 0.0 / 0.0
的值。通常,如果 0 除以任何数,结果都为 0,但如果用任何数除以 0,结果就为无
穷大。表达式
0.0 / 0.0 会陷入一种自相矛盾的境地:值既为 0,又无穷大。针对这种
情况,
C#语言提供了另一个值 NaN,即 not a number。所以,如果计算表达式
0.0 / 0.0,则结果为 NaNNaN Infinity 可以在表达式中使用。如果计算 10 + NaN
结果将为
NaN。如果计算 10 + Infinity,结果将为 Infinity。这个规则的唯一例外是
表达式
Infinity * 0,其结果为 0,而表达式 NaN * 0 的结果为 NaN


ToString 方法
.NET Framework 中的每个类都有一个 ToString 方法。 ToString 方法的用途是将一个
对象转换为相应的字符串形式。在前一个例子中,我们使用
int 对象 outcome
ToString 方法将 outcome 的整数值转换成对应的字符串值。这个转换是必要的,因
为需要在
result 文本框的 Text 属性中显示该值,而 Text 属性只能包含字符串。创建
自己的类时,还可以自己实现
ToString 方法,指定类应该如何表示成一个字符串。
要想进一步了解如何创建自己的类,请参见第
7 章。