Ищете более простой способ использования поплавков в C # - PullRequest
3 голосов
/ 20 июля 2009

По ряду причин я должен использовать числа с плавающей точкой в ​​моем коде вместо двойных. Чтобы использовать литерал в моем коде, я должен написать что-то вроде:

float f = 0.75F;

или компилятор прервет, так как он обрабатывает только "0,75" как двойное число. Есть ли что-нибудь, что я могу вставить в свой код или установить в Visual Studio, чтобы он воспринимал литерал типа «0,75» как число с плавающей точкой, без необходимости каждый раз добавлять «F»?

Ответы [ 6 ]

14 голосов
/ 20 июля 2009

Нет - к счастью, ИМО. Литералы везде одинаковы.

Это хорошо - представьте себе, что какой-нибудь разработчик по техническому обслуживанию приходит и просматривает ваш код через год. Он видит «0,75» и думает: «Я знаю C # - это двойное! Подожди, как оно присваивается переменной с плавающей запятой?» Ик.

Неужели так больно добавлять "F" везде? У вас действительно есть , что много констант? Не могли бы вы извлечь их как постоянных значений, чтобы все ваши литералы с суффиксом "F" находились в одном месте.

1 голос
/ 20 июля 2009

FYI - вы можете найти все опции компилятора для C # на http://msdn.microsoft.com/en-us/library/6ds95cz0.aspx. Если вы проверите там, вы увидите, что нет никакой опции, которая позволяет это - и это правильно по причинам что @Jon Skeet отметил.

1 голос
/ 20 июля 2009

Язык интерпретирует литералы точности с плавающей запятой как двойные везде. Это не настраиваемая функция компилятора - и на то есть веская причина.

Настройка того, как язык интерпретирует ваш код, приведет к проблемам как с совместимостью, так и с возможностью разработчиков технического обслуживания понять, что означает код.

Обычно это нежелательно, но вы можете немного уменьшить боль в C # 3, используя:

var f = 0.75F;

Только будьте осторожны, потому что если вы забудете суффикс 'F' с этим синтаксисом, компилятор создаст double, а не float.

0 голосов
/ 10 июня 2012

Правильное поведение компилятора заключается не в том, чтобы интерпретировать не суффиксированные литералы как числа с плавающей запятой, а в том, чтобы признать, что преобразования из двойного в число с плавающей точкой следует рассматривать как расширяющие преобразования, поскольку для каждого значения double либо точно одно однозначно правильное представление float, либо (в нескольких редких случаях) будет ровно два одинаково хороших значения, ни одно из которых не будет больше, чем часть на квадриллион из того, чтобы быть однозначно корректным значением. Семантически преобразования из float в double следует рассматривать как сужающие преобразования (поскольку они требуют, чтобы компилятор "угадал" информацию, которой у него нет), но практические трудности, которые могут возникнуть, могут оправдать выполнение преобразований в этом направлении. 'расширение'.

Возможно, стоит обратиться к Microsoft с просьбой добавить расширяющуюся конверсию из double в float? Нет веской причины, по которой код, который вычисляет графические координаты как double, должен быть загроможден типами при вызове функций рисования.

0 голосов
/ 22 июля 2009

Я бы посоветовал вам всегда использовать

var meaning = 1f;

потому что ключевое слово "var" экономит много времени на интерпретацию и обслуживание.

0 голосов
/ 20 июля 2009

Float поставляется с F: -)

...