2009-07-20 2 views
3

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

float f = 0.75F; 

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

+5

Да ладно! Сколько плавающих констант вы должны определить? Если многие, просто используйте «Найти и заменить» несколько раз. – leppie

+1

Я согласен с @leppie. Вы все равно должны ограничивать литералы. Если вы выполняете множество назначений по умолчанию, и это, как правило, одно и то же значение, переместите их в статический внутренний класс и ссылайтесь на них таким образом. Кроме того, вы можете использовать нижний регистр f, а не верхний регистр F, чтобы обозначить плавающий литерал, сохраняя нажатие клавиши shift. Если вам все равно. :) – Randolpho

+0

Мне интересно, почему кто-нибудь когда-либо использовал поплавки вместо двухместных. Можете ли вы рассказать нам о своем «числе причин»? –

ответ

14

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

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

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

+0

Как я уже упоминал в своем комментарии к исходному вопросу, я согласен: ограничьте свои литералы и извлеките их в качестве констант для максимальной ремонтопригодности – Randolpho

+0

Это не щелевидные запястья, болезненные, но это раздражает. То, что я делаю, в основном экспериментально и включает в себя настройку значений параметров и тестирование результатов. Иногда их много в формуле, поэтому есть много Fs забудьте добавить. – MusiGenesis

+0

Затем используйте двойники во время тестов и переключайтесь на поплавки позже. – Randolpho

1

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

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

Хотя не рекомендуется вообще, вы можете уменьшить боль немного в C# 3 с помощью:

var f = 0.75F; 

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

+0

Это не уменьшает эту боль вообще. Мне все еще нужно набрать F. – MusiGenesis

+0

Это одно место, где я ** не использовал ** синтаксис var только по той причине, которую вы описали. С другой стороны, я бы использовал double, а не floats ... – tvanfosson

+0

Некоторые языки позволяют переопределять, как интерпретировать код с помощью макросов, например C. Он не был включен в C#, потому что он не очень полезен, и из него так легко сделать беспорядок. :) – Guffa

1

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

0

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

var meaning = 1f; 

, потому что «вар» ключевое слово экономит много человеческой интерпретации и времени обслуживания.

+0

Я не уверен, что это действительно экономит любую человеческую интерпретацию - заставляя меня смотреть в конце (f) для типа вместо того, чтобы позволить мне полагаться на обычное соглашение C# с тем, что тип сначала оставляет больше места для ошибки и занимает больше времени imo. – user12345613

0

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

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

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

  • Нет связанных вопросов^_^