2012-10-16 5 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 вместо этого подхода.

Смежные вопросы