Problem z wartością currency.

0

Witam
Mam problem z typem currency. Otóż mam program który operuje na wartościach PLN. Pod Windows XP i Vista wszystko pracuje normalnie, obliczenia są prawidłowe. Natomiast pod Windows 7 liczby z wartością po przecinku np. 1,70 zaokrągla, a przy ręcznym wpisywaniu w pole Edit wywala błąd: " is not a valid floating point value". Szukałem trochę w internecie i znalazłem to:
http://www.elevatesoft.com/forums?action=view&category=dbisam&id=dbisam_general&page=2&msg=63871
I teraz moje pytania:
#czy naprawdę muszę w OnCreate ustawić własności currency?
#czy nie wpłynie to negatywnie na pracę programu na innych systemach?
#czy też może wystarczy wprowadzić jakąś zmianę w ustawieniach regionalnych w samym Windows 7?

2

Tak jak zrobisz tak będzie.
Zawsze lepiej słuchać tego co użytkownik uważa za słuszne, jak postawił w ustawieniach regionalnych przecinek to niech ma przecinek.
Możesz też podmienić wartość DecimalSeparator.

0

Wersja systemu prawdopodobnie nie ma znaczenia,tylko ustawiony separator dziesiętny.

0

Witam
Mam problem z typem currency. Otóż mam program który operuje na wartościach PLN. Pod Windows XP i Vista wszystko pracuje normalnie, obliczenia są prawidłowe. Natomiast pod Windows 7 liczby z wartością po przecinku np. 1,70 zaokrągla, a przy ręcznym wpisywaniu w pole Edit wywala błąd: " is not a valid floating point value". Szukałem trochę w internecie i znalazłem to:
http://www.elevatesoft.com/for[...]neral&page=2&msg=63871

Super że szukałeś, szkoda że nie podajesz o jakie środowisko chodzi. Powiem więc o tym czego znawcą jestem.
FPC (jak i Lazarus) na początku wyszukuje w systemie aktualne ustawienia (m.in. separator dziesiętny) i tego używa domyślnie przy wszelakim parsowaniu. Jeżeli chcesz ręcznie zmienić te ustawienia to odsyłam do dokumentacji FPC gdzie są inne wersje funkcji do której możesz dodać swój rekord ustawień który ustawisz jak Ci się podoba. Mogę natomiast zaprzeczyć jakimkolwiek anomaliom z wartościami zmiennoprzecinkowymi w Lazarusie/FPC pod Se7en. Jeżeli natomiast to nie rozwiązuje twojego problemu to podaj więcej danych.

0

Przepraszam bardzo za nieścisłość: programuję w Delphi, dokładnie używam D7. Niestety problem pozostaje nierozwiązany. Ustawiłem w zdarzeniu formy .OnCreate na sztywno decimalseparator i mimo tego zabiegu dalej zwraca błąd: " is not a valid floating point value". Testuję to na Win 7 Home basic i działa, a na win 7 Proffesional nie. Nie wiem za bardzo jak to ugryźć, proszę o pomoc

0

tak jak napisał @_13th_Dragon, ustaw w onCreate:
DecimalSeparator := '.';

chyba, że wolisz nawias zamiast kropki to zrób sobie nawias

0

ale tak właśnie zrobiłem. I w win7 home basic działa a w win7 professional nie

0

w jaki sposób konwertujesz z tekstu na liczbe?

1
maniutek20 napisał(a):

ale tak właśnie zrobiłem. I w win7 home basic działa a w win7 professional nie

Wiesz, ciężko oczekiwać od środowiska o 10 lat starszego niż windows 7 aby działało dobrze na owym systemie (chociażby alt-bug). Poleciłbym przesiadkę na coś współcześniejszego. Ale niestety niektórzy są po prostu zbyt zamknięci żeby zrozumieć że czas D7 minął...

w jaki sposób konwertujesz z tekstu na liczbe?

Liczysz na kod? Może jeszcze stack frame i assembler? Eheh, zbyt trudne dla pytacza aby zdobyć/dać nam te dane.

0

Całą konwersję robię tak:

Procedure button1.Click (sender:TObject)
var
k1,k2,k3: string[10];
begin
k3:= '15';
label1.caption:= currtostr(strtocurr(K3)*strtocurr(edit1.text));
0

dodaj: ShowMessage(edit1.text);

przed przypisaniem do label1.caption i powiedz co Ci komunikat wyświetlił

0

Wydaje mi się, że znalazłem rozwiązanie. Analizując "opcje regionalne i językowe" zauważyłem, że typ amerykański przedstawia liczby bardzo dziwnie np 1000 zł to po"amerykańsku" 1,000.00 $. Więc "decimalseparator" nie za bardzo mi pomaga. Znalazłem coś takiego:

 
var
 FS : TFormatSettings;
..
begin
fs.CurrencyDecimals:'.';
end;

działa pod win 7 professional i pod xp. ATFormatSettings ma jeszcze inne ciekawe możliwości.

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