Pergunta

Por vários motivos, tenho que usar carros alegóricos no meu código em vez de duplas. Para usar um literal no meu código, tenho que escrever algo como:

float f = 0.75F;

Ou o compilador fará o berf, pois trata apenas "0,75" como um duplo. Existe algo que eu possa colocar no meu código ou definir no Visual Studio que o fará tratar um literal como "0,75" como um bóia sem precisar anexar um "f" sempre?

Foi útil?

Solução

Float vem com um f :-)

Outras dicas

Não - Felizmente, IMO. Os literais são tratados da mesma maneira em todos os lugares.

Isso é uma coisa boa - imagine que algum desenvolvedor de manutenção vem e analisa seu código em um ano. Ele vê "0,75" e pensa "eu conheço C# - isso é um duplo! Espere, como está sendo atribuído a uma variável flutuante?" Ick.

É realmente tão doloroso adicionar o "F" em todos os lugares? Você realmente tem este muitas constantes? Você poderia extraí -los Como Valores constantes, portanto, todos os seus literais "F-Suffixados" estão no mesmo lugar.

FYI - você pode encontrar todas as opções do compilador para C# em http://msdn.microsoft.com/en-us/library/6ds95cz0.aspx. Se você verificar lá, verá que não há nenhuma opção que permita isso - e com razão pelos motivos que o @Jon Skeet observou.

A linguagem interpreta os literais de precisão de ponto flutuante como dobra em todos os lugares. Este não é um recurso configurável do compilador - e por um bom motivo.

Configurar como o idioma interpreta o código levaria a problemas com a compatibilidade e a capacidade dos desenvolvedores de manutenção de entender o que o código significa.

Embora não seja aconselhável em geral, você pode reduzir um pouco a dor em C# 3 usando:

var f = 0.75F;

Apenas tenha cuidado, porque esquecer o sufixo 'f' com essa sintaxe fará com que o compilador crie um duplo, não um flutuador.

Eu aconselho você a sempre usar

var meaning = 1f;

Porque a palavra -chave "var" economiza muita interpretação humana e tempo de manutenção.

O comportamento adequado não seria para um compilador interpretar literais não abafados como carros alegóricos de precisão única, mas reconhecer que as conversões de duplo para flutuante devem ser consideradas como ampliando conversões, uma vez que, para cada double valor, existe precisamente uma correção sem ambiguidade float Representação, ou (em alguns casos raros de borda), haverá precisamente dois valores igualmente bons, nenhum dos quais será mais do que uma parte por quadrilhão por ser o valor não ambiguamente correto. Semanticamente, conversões de float para double deve ser considerado como estreitando as conversões (pois elas exigem que o compilador "adivinhe" as informações que não possui), mas as dificuldades práticas que causariam justificarem fazer conversões nessa direção 'ampliando'.

Talvez alguém deva solicitar a Microsoft para adicionar uma conversão crescente de double para float? Não há uma boa razão para que o código que calcule os gráficos coordena como double Deve ser confuso com os typecasts ao chamar funções de desenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top