Sory za banał, ale zupełnie nie rozumiem czemu tryparse nie może przeparsować tego pierwszego stringa

0

Chodzi mi o zerowy element tablicy values. Dlaczego dostaje odpowiedź "unable" ??? Sory za ten banał z mojej strony, ale to mi po prostu nie daje spokoju;-))

            string[] values = { "1,643.57", "$1,643.57", "-1.643e6",
                          "-168934617882109132", "123AE6",
                          null, String.Empty, "ABCDEF" };
            double number;

            foreach (var value in values)
            {
                if (Double.TryParse(value, out number))
                    Console.WriteLine("'{0}' --> {1}", value, number);
                else
                    Console.WriteLine("Unable to parse '{0}'.", value);
            }

5

Dlaczego to nie wiem, ale jakbyś chciał to faktycznie wykonać, to może w ten sposób:

string[] values = { "1,643.57", "$1,643.57", "-1.643e6", "-168934617882109132", "123AE6", null, string.Empty, "ABCDEF" };

var formatInfo = new NumberFormatInfo();
formatInfo.CurrencyDecimalSeparator = ".";
formatInfo.NumberDecimalSeparator = ".";

formatInfo.NumberGroupSeparator = ",";
formatInfo.CurrencyGroupSeparator = ",";

foreach (var value in values)
{
    if (double.TryParse(value, NumberStyles.Any, formatInfo, out var number))
        Console.WriteLine("'{0}' --> {1}", value, number);
    else
        Console.WriteLine("Unable to parse '{0}'.", value);
}
'1,123,643.57' --> 1123643,57
Unable to parse '$1,643.57'.
'-1.643e6' --> -1643000
'-168934617882109132' --> -1,6893461788210912E+17
Unable to parse '123AE6'.
Unable to parse ''.
Unable to parse ''.
Unable to parse 'ABCDEF'.

Wydaje mi się, że po prostu domyślne założenia co do parsowania double nie są takie jakie byś chciał

albo w twojej culture np. w Windowsie są inne niż dla tego stringa.

0

@WeiXiao: ;-))) No ;-)) Teraz faktycznie działa.

3
finito napisał(a):

;-))) No ;-)) Teraz faktycznie działa.

Znalazłem ten sam kod w MSDN.
https://docs.microsoft.com/pl-pl/dotnet/api/system.double.tryparse?view=net-5.0
Moze podawaj pochodzenie, to często wiele upraszcza. MSDN, jak wiele platform edukacyjnych, daje przykłady "dobrego" i "złego", inaczej mówiąc przykłady pozytywne i negatywne, i te wywołania miały się nie powieść.

BTW oczekiwał bym, że po "kilku" latach praktyki intuicja powiedziała by, że "1,643.57" nie jest zbyt prawidłowym formatem w "świecie uniwersalnym"

Dlaczego oczekujesz, że tutaj mamy się wystrzeliwać z amunicji, a ty będziesz stał z rękami w kieszeniach.

A propos MSDN, przesuwając dwa ekrany niżej, jest tam odpowiedź: wprowadzane są wersja tej metody z Format Info - ale ci się nie chciało.
Robisz z nas ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1