Program wyciąga dane z bazy danych na MySQL'u, a wyniki zapytania są zwracane w postaci ?stringów?. Oto przykładowy kod itp:
Struktura tabeli :
CREATE TABLE tabela
(
tabela_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
wartosc float(7,3) NOT NULL,
PRIMARY KEY (tabela_id)
);
przykładowe dane
tabela_id wartosc
1 2.300
2 3.200
3 5.250
....
// zapytanie zwracające wszystkie elementy tabeli
wynik1 = fWykonajSQL(?SELECT wartosc FROM tabela?);
float fsuma = 0.0;
for(int i = 0; i < fIloscWierszy(wynik1); i++
{
fsuma += fWartoscZapytania(wynik, i);
cout << ? element ? << i << ? = ? << fWartoscZapytania(wynik, i) << endl;
}
// zapytanie wyliczające sumę wartości elementów z tabeli
wynik2 = fWykonajSQL(?SELECT SUM(wartosc) FROM tabela?);
cout << ?fsuma = ? << fsuma << endl;
cout << ?suma z zapytania = ? << fWartoscZapytania(wynik2, 0) << endl;
a wynik jest taki
element 0 = 2.300
element 1 = 3.200
element 2 = 5.250
fsuma = 10.7499999
suma z zapytania = 10.75
Wnioski: Czasem funkcja atof(?2.300?) zwraca 2.3 ale w niektórych sytuacjach wynikiem jest 2.2999999
Próbowałem znaleźć regułę w których sytuacjach wynik jest prawidłowy a w których błędny ale nic nie udało mi się wydedukować.
Jakieś rady jak z tego wybrnąć ???