Questo getta una FormatException
, che sembra non dovrebbe:
Int32.Parse("1,234");
Questo non lo fa, che sembra normale:
Single.Parse("1,234");
E sorprendentemente, questo analizza solo fine:
Single.Parse("1,2,3,4"); //Returns 1234
La mia cultura locale è EN-US, quindi ,
è il carattere di separazione di migliaia predefinito.
domanda principale: Perché l'incoerenza?
Inoltre: Perché funziona Parse("1,2,3,4")
? Sembra che stia rimuovendo tutte le istanze del char del separatore locale prima dell'analisi. So che ci sarebbe un sovraccarico extra di runtime in un controllo regex o qualcosa del genere, ma quando il letterale numerico "1,2,3,4" non dovrebbe essere un refuso?
correlati: C# Decimal.Parse issue with commas
Interessante .. 'Single.Parse (" 1,2,3,4 ", NumberFormatInfo.InvariantInfo);' restituisce anche '1234'. – Sinatr
Qui non c'è incoerenza. 'Int32.Parse()' imposta di default 'NumberStyles.Integer' per il suo secondo argomento, che non supporta il separatore delle migliaia. D'altra parte, 'Single.Parse()' imposta di default 'NumberStyles.Float | NumberStyles.AllowThousands', che, beh, consente migliaia di separatori. Vedere la sezione Note in [la documentazione per quest'ultimo] (https://msdn.microsoft.com/en-us/library/2thct5cb.aspx). –
@ FrédéricHamidi, il problema è il terzo esempio. Non c'è bisogno di spiegare prima o seconda. Puoi spiegare perché '" 1,2,3,4 "' è analizzato come valore '1234'? Ora sono spaventato per i miei campi di input dell'utente .. per tutti loro! – Sinatr