为什么使用double.Parse然后转换为浮点数?

时间:2012-10-16 23:00:21

标签: c# casting refactoring type-conversion

我在一些我正在研究的代码中看到了这一点:

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

想知道为什么他们不会仅使用float.Parse代替double.Parse并投放到float。有充分的理由吗?

3 个答案:

答案 0 :(得分:3)

  

有充分的理由吗?

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

答案 1 :(得分:1)

  

有充分的理由吗?

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

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

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

  3. 一般来说,这可能只是直接使用Single.Parse

答案 2 :(得分:0)

如果您尝试使用此代码,您将看到,如果该数字太大而无法使用float表示,则会引发异常,但是当从double转换为float时,将不会有任何异常。数字将是无限的。亲自尝试一下:

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

也许有人会在第一时间预料到这种行为。尽管如此,我会使用try catch而不是这种方法。