1

我在我正在处理的一些代码中看到了这一点:

num1 = (float)double.Parse(parameters[i + 1]);
num2 = (float)double.Parse(parameters[i + 2]);

想知道为什么他们不只是使用float.Parse而不是double.Parse并转换为float. 有充分的理由吗?

4

3 回答 3

3

有充分的理由吗?

是的。如果参数很大,上面的代码会引发OverflowException,但代码只需要最大值为 float max 的值。

于 2012-10-16T23:05:39.883 回答
1

有充分的理由吗?

并不真地。这里的主要区别是:

  1. 一些额外的开销(这当然没有任何好处)

  2. 如果值超出单个可表示的范围,则会出现不同的潜在异常。

一般来说,这可能应该直接使用Single.Parse

于 2012-10-16T23:05:01.077 回答
0

如果您尝试这段代码,您会看到,例如,如果数字太大而无法使用 float 表示,则会引发异常,但当从 double 转换为 float 时不会出现任何异常。这个数字将是无穷大。自己试试:

string numString = "23339823498723948723958734956283468237468273468274602983409283.4092834092834029834029384029834";
            double num2 = double.Parse(numString);
            float num3 = (float)num2;
            float num1 = float.Parse(numString);

也许有人一开始就预料到了这种行为。即使,我会使用 try catch 而不是这种方法。

于 2012-10-16T23:12:52.133 回答