2012-10-16 69 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來代替這種方法。