Sdílet prostřednictvím


Standardní přesnost analýzy číselného formátu

.NET teď podporuje hodnoty větší přesnosti při formátování čísel jako řetězců používajících ToString a TryFormat.

Poznámka:

Maximální přesnost byla v .NET 7 znovu změněna. Další informace naleznete v tématu Maximální přesnost pro řetězce číselného formátu.

Změna popisu

Při formátování čísel jako řetězců představuje specifikátor přesnosti v řetězci formátu počet číslic ve výsledném řetězci. V závislosti na specifikátoru formátu, což je znak na začátku řetězce, může přesnost představovat celkový počet číslic, počet platných číslic nebo počet desetinných číslic.

V předchozích verzích .NET je standardní logika analýzy číselného formátu omezena na přesnost 99 nebo méně. Některé číselné typy mají větší přesnost, ale ToString(string format) nezpřístupňují je správně. Pokud zadáte například přesnost větší než 99 32.ToString("C100"), formátovací řetězec se interpretuje jako vlastní řetězec číselného formátu místo "měna s přesností 100". Ve vlastních řetězcích číselného formátu se znaky interpretují jako literály znaků. Kromě toho je řetězec formátu, který obsahuje neplatný specifikátor formátu, interpretován odlišně v závislosti na hodnotě přesnosti. H99FormatException vyvolá pro specifikátor neplatného formátu, zatímco H100 je interpretován jako vlastní řetězec číselného formátu.

Počínaje rozhraním .NET 6 podporuje rozhraní .NET přesnost až Int32.MaxValuedo . Formátovací řetězec, který se skládá ze specifikátoru formátu s libovolným počtem číslic, se interpretuje jako standardní řetězec číselného formátu s přesností. A FormatException je vyvolán pro jednu nebo obě z následujících podmínek:

Tato změna byla implementována v logikě analýzy, která ovlivňuje všechny číselné typy.

Následující tabulka ukazuje změny chování pro různé formátovací řetězce.

Formát řetězce Předchozí chování Chování .NET 6+
C2 Označuje měnu dvěma desetinnými číslicemi. Označuje měnu dvěma desetinnými číslicemi (beze změny).
C100 Označuje vlastní řetězec číselného formátu, který vytiskne "C100". Označuje měnu 100 desetinnými číslicemi.
H99 FormatException Vyvolá se kvůli neplatnému specifikátoru standardního formátu "H" FormatException Vyvolá se kvůli neplatnému specifikátoru standardního formátu "H" (beze změny)
H100 Označuje vlastní řetězec číselného formátu. FormatException Vyvolá se kvůli neplatnému specifikátoru standardního formátu "H"

Zavedená verze

.NET 6

Důvod změny

Tato změna opravuje neočekávané chování při použití vyšší přesnosti při analýze číselného formátu.

Ve většině případů není nutná žádná akce a ve výsledných řetězcích se zobrazí správná přesnost.

Pokud se ale chcete vrátit k předchozímu chování, ve kterém je specifikátor formátu interpretován jako literálový znak, pokud je přesnost větší než 99, můžete tento znak zabalit do jednoduchých uvozovek nebo ho uvozovat zpětným lomítkem. Například v předchozích verzích 42.ToString("G999") .NET vrátí G999. Chcete-li zachovat toto chování, změňte formátovací řetězec na "'G'999" nebo "\\G999". Bude fungovat na rozhraní .NET Framework, .NET Core a .NET 5+.

Následující řetězce formátu budou nadále interpretovány jako vlastní řetězce číselného formátu:

  • Začněte libovolným znakem, který není abecedním znakem ASCII, $ například nebo è.
  • Začněte abecedním znakem ASCII, za kterým nenásleduje číslice ASCII, A$například .
  • Začněte abecedním znakem ASCII, za kterým následuje sekvence číslic ASCII, a pak libovolný znak, který není znakem číslice ASCII, A12Anapříklad .

Ovlivněná rozhraní API

Tato změna byla implementována v logikě analýzy, která ovlivňuje všechny číselné typy.

Viz také