Alla ricerca di un modo più semplice per usare carri in C #
-
18-09-2019 - |
Domanda
Per una serie di ragioni, devo usare carri nel mio codice, invece di doppie. Per utilizzare un letterale nel mio codice, devo scrivere qualcosa di simile:
float f = 0.75F;
o il compilatore barf in quanto si tratta solo "0,75" come un doppio. C'è qualcosa che posso mettere nel mio codice o impostare in Visual Studio che renderà trattare un letterale come "0,75", come un galleggiante, senza dover aggiungere una "F" ogni volta?
Soluzione
Float è dotato di un F: -)
Altri suggerimenti
No - per fortuna, IMO. Letterali sono trattati allo stesso modo in tutto il mondo.
Questa è una buona cosa - immaginare qualche sviluppatore di manutenzione viene e guarda il codice in un anno. Egli vede "0.75" e pensa "So C # -!? Questa è una doppia Aspetta, come si viene assegnato a una variabile float" Ick.
E 'davvero così doloroso per aggiungere la "F" in tutto il mondo? Hai davvero che molte costanti? Potrebbe li come si estrarre valori costanti, in modo che tutti i tuoi letterali "F-suffisso" sono nello stesso posto.
A proposito - si possono trovare tutte le opzioni del compilatore per C # a http : //msdn.microsoft.com/en-us/library/6ds95cz0.aspx . Se si seleziona lì, vedrete che non c'è alcuna possibilità che permette questo -. E giustamente, per le ragioni che @ Jon Skeet notato
La lingua interpreta virgola letterali di precisione floating come doppie in tutto il mondo. Questa non è una caratteristica configurabile del compilatore -. E con buona ragione
Configurazione come la lingua che interpreta il codice porterebbe a problemi sia con la compatibilità e la capacità degli sviluppatori di manutenzione per capire cosa significa il codice.
Anche se non è consigliabile in generale, è possibile ridurre il dolore un po 'in C # 3 utilizzando:
var f = 0.75F;
Basta essere attenti, perché dimenticare il suffisso 'F' con questa sintassi farà sì che il compilatore per creare un doppio, non un galleggiante.
Vi consiglio di utilizzare sempre
var meaning = 1f;
perché la parola chiave "var" fa risparmiare un sacco di interpretazione umana e tempi di manutenzione.
Il comportamento corretto non sarebbe per un compilatore interpretare letterali non suffisso i galleggianti singola precisione, ma piuttosto di riconoscere che le conversioni da letto di galleggiare dovrebbero essere considerate ampliare conversioni poiché, per ogni valore double
, non v'è né precisamente una rappresentazione float
senza ambiguità-corretto, oppure (in alcuni casi limite rare) ci saranno precisamente due valori altrettanto buoni-, nessuno dei quali sarà più di una parte per quadrilione dall'essere il valore univocamente-corretto. Semanticamente, le conversioni da float
a double
devono essere considerati come conversioni restringimento (in quanto richiedono che il compilatore "indovinare" a informazioni che non ha), ma le difficoltà pratiche che potrebbero causare potrebbero giustificare delle conversioni in quella direzione 'allargamento'.
Forse si dovrebbe presentare una petizione Microsoft per aggiungere una conversione ampliamento da double
a float
? Non c'è alcun buon motivo per cui il codice che calcola la grafica coordina come double
deve essere ingombra di conversioni di tipo quando si chiama funzioni di disegno.