2012-10-16 33 views
1

我的一些代码,看到这个我工作:为什么使用double.Parse然后将其转换为浮点数?

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

想知道他们为什么不直接使用float.Parse代替double.Parse和铸造到float。有没有很好的理由?

+0

我认为他们不知道'float.Parse'或'Single.Parse'存在 –

回答

3

有没有很好的理由?

是的。如果参数很大,上面的代码将会提高OverflowException,但代码只会将最大值作为float max的值。

+0

但是,期望的参数在0到100之间。所以我想在这种情况下我可以安全地重构它。 –

+0

@JohnSmith是的,在这种情况下是的。 – Ankush

1

有没有很好的理由?

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

  1. 的额外开销(当然这是不以任何方式受益)有点

  2. 如果该值范围可表示外由不同的电位异常单。

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

+0

据我所知,Single.Parse通过生成一个Double并将其转换为Single,如通过例如证明'Single.Parse( “8888888.5000000001”)'。 – supercat

0

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

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

也许有人预计这种行为在第一个地方。即使如此,我会用try catch来代替这种方法。