Procurando uma maneira mais fácil de usar carros alegóricos em C#
-
18-09-2019 - |
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?
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.