Kropka zamiast przecinka w liczbach

0

W bazie sql mam 1.5
Po odczycie
wartosc = Convert.ToDouble(Poz["wartosc"]);

mam 1,5

Dlaczego robi się przecinek a nie kropka?
Jak to poprawić?

4

Musisz głęboko przetrawić czym jest liczba sama w sobie (siedem jabłek) a czym jest wizualna reprezentacja (liczby arabskie, rzymskie czy japońskie - a jabłek jest ciągle siedem).
Jak to przemyślisz,z poczytaj o krajowych formatach liczb, dat itp.

Spodziewam się zrozumiesz, że problem nie ma żadnego istotnego znaczenia.

0

Ale w czym problem? Że źle ci konwertuje liczbe z przecinkiem do double czy że z bazy dostajesz w przecinkiem? Jak to pierwsze to mozesz zrobić tak:

wartosc = Convert.ToDouble(Poz["wartosc"], CultureInfo.GetCultureInfo("pl-PL"));
0
AnyKtokolwiek napisał(a):

Musisz głęboko przetrawić czym jest liczba sama w sobie (siedem jabłek) a czym jest wizualna reprezentacja (liczby arabskie, rzymskie czy japońskie - a jabłek jest ciągle siedem).
Jak to przemyślisz,z poczytaj o krajowych formatach liczb, dat itp.

Spodziewam się zrozumiesz, że problem nie ma żadnego istotnego znaczenia.

Problem w tym, że jak wysyłam to w xml do drukarki to drukarka dostaje 1 a nie 1.5

1
harbii napisał(a):

W bazie sql mam 1.5
Po odczycie
wartosc = Convert.ToDouble(Poz["wartosc"]);

mam 1,5

Nie, nie masz po odczycie "1,5", to dopiero masz po powtórnej konwersji double'a do stringa.
Double to double, format binarny, nie ma w nim ani kropki ani przecinka.

Jeśli chcesz stringa z kropką to da się (używając CultureInfo.InvariantCulture) ale... jeżeli twoje Poz["wartosc"] to string o treści "1.5" to znaczy że jest już tym co ci potrzeba?

0
Azarien napisał(a):
harbii napisał(a):

W bazie sql mam 1.5
Po odczycie
wartosc = Convert.ToDouble(Poz["wartosc"]);

mam 1,5

Nie, nie masz po odczycie "1,5", to dopiero masz po powtórnej konwersji double'a do stringa.
Double to double, format binarny, nie ma w nim ani kropki ani przecinka.

Jeśli chcesz stringa z kropką to da się (używając CultureInfo.InvariantCulture) ale... jeżeli twoje Poz["wartosc"] to string o treści "1.5" to znaczy że jest już tym co ci potrzeba?

Po convert.todouble wartosc = 1,5 (czyli jest przecinek) co za tym idzie podczas mnożenia, dodawania zaokrągla mi do 1.00. Dlaczego?

0
harbii napisał(a):
Azarien napisał(a):
harbii napisał(a):

W bazie sql mam 1.5
Po odczycie
wartosc = Convert.ToDouble(Poz["wartosc"]);

mam 1,5

Nie, nie masz po odczycie "1,5", to dopiero masz po powtórnej konwersji double'a do stringa.
Double to double, format binarny, nie ma w nim ani kropki ani przecinka.

Jeśli chcesz stringa z kropką to da się (używając CultureInfo.InvariantCulture) ale... jeżeli twoje Poz["wartosc"] to string o treści "1.5" to znaczy że jest już tym co ci potrzeba?

Po convert.todouble wartosc = 1,5 (czyli jest przecinek) co za tym idzie podczas mnożenia, dodawania zaokrągla mi do 1.00. Dlaczego?

Zamiast się wykłócać, przeczytaj jeszcze raz co ci napisał Azarien, a jak to nie pomoże to podaj więcej kodu, bo błąd masz w innym miejscu!

A generalnie Azarienonwi chodziło o to, że wartosc nie zawiera informacji jaki jest separator dziesiętny. To tylko wartość liczbowa.
W kodzie, którym zapisujesz wartosc do xml dokonujesz konwersji do napisu i tam robisz to źle.

0

Moje rozwiązanie:

odczyt z mysql

wartosc = Convert.ToDouble(Poz["wartosc"]);

zamiana na kropkę

string wartoscs = Convert.ToString(wartosc);
wartoscs = wartoscs.Replace(",", ".").Replace(".", ".");

Dzięki

3

Convert.ToString Method (System) | Microsoft Docs

ToString(Double)

Converts the value of the specified double-precision floating-point number to its equivalent string representation.

......

Remarks

This implementation is identical to Double.ToString().

Idąc za ostatnim linkiem:

Double.ToString Method (System) | Microsoft Docs

ToString()

Converts the numeric value of this instance to its equivalent string representation.
......

Remarks

The ToString() method formats a Double value in the default ("G", or general) format of the current culture. If you want to specify a different format, precision, or culture, use the other overloads of the ToString method, as follows:

czyli powinno być:

string wartoscs = wartosc.ToString(CultureInfo.InvariantCulture);
0
harbii napisał(a):

Dlaczego robi się przecinek a nie kropka?

Bo takie masz ustawienia systemowe. Najprawdopodobniej polskie. A w języku polskim separatorem dziesiętnym jest jedyny słuszny przecinek.

harbii napisał(a):

zamiana na kropkę

string wartoscs = Convert.ToString(wartosc);
wartoscs = wartoscs.Replace(",", ".").Replace(".", ".");

Tak, ta zamiana kropki na kropkę to faktycznie musi być autorskie rozwiązanie. Tak czy siak, nie używając wbudowanych sposobów na konwersję z uwzględnieniem ustawień regionalnych robisz to źle.

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