我的一些代碼,看到這個我工作:爲什麼使用double.Parse然後將其轉換爲浮點數?
num1 = (float)double.Parse(parameters[i + 1]);
num2 = (float)double.Parse(parameters[i + 2]);
想知道他們爲什麼不直接使用float.Parse
代替double.Parse
和鑄造到float
。有沒有很好的理由?
我的一些代碼,看到這個我工作:爲什麼使用double.Parse然後將其轉換爲浮點數?
num1 = (float)double.Parse(parameters[i + 1]);
num2 = (float)double.Parse(parameters[i + 2]);
想知道他們爲什麼不直接使用float.Parse
代替double.Parse
和鑄造到float
。有沒有很好的理由?
有沒有很好的理由?
是的。如果參數很大,上面的代碼將會提高OverflowException
,但代碼只會將最大值作爲float max的值。
但是,期望的參數在0到100之間。所以我想在這種情況下我可以安全地重構它。 –
@JohnSmith是的,在這種情況下是的。 – Ankush
據我所知,Single.Parse通過生成一個Double並將其轉換爲Single,如通過例如證明'Single.Parse( 「8888888.5000000001」)'。 – supercat
如果您嘗試使用此代碼,您會看到如果數字太大而無法用float表示,則會引發異常,但當從double轉換爲float時,不會有任何異常。這個數字將是無限的。嘗試一下:
string numString = "23339823498723948723958734956283468237468273468274602983409283.4092834092834029834029384029834";
double num2 = double.Parse(numString);
float num3 = (float)num2;
float num1 = float.Parse(numString);
也許有人預計這種行爲在第一個地方。即使如此,我會用try catch來代替這種方法。
我認爲他們不知道'float.Parse'或'Single.Parse'存在 –