2012-04-24 15 views
6

Mam QString myNumber zawierający "09338.712001". Gdy wykonuję:QString :: toDouble() daje mi podwójnie złą precyzję

myNumber.toDouble();, zwraca 9338,71, ale chcę, aby wartość podwójna była oryginalna, czyli 09338.712001. Czy ktoś wie, jak uzyskać podwójne zwracane przez toDouble, aby mieć taką samą precyzję jak QString? Dzięki.

Odpowiedz

12

Twój problem prawdopodobnie dotyczy sposobu wyprowadzania tych wartości.

QString s("9338.712001"); 
bool ok = false; 

double a = 9338.712001; 
double b = s.toDouble(&ok); 
double c = 1/3.0; 

qDebug() << "a: " << a; 
qdebug() << "b: " << b; 

qDebug() << "a: " << QString("%1").arg(a, 0, 'g', 13) 
qDebug() << "b: " << QString("%1").arg(b, 0, 'e', 13); 

qDebug() << "c: " << QString("%1").arg(c, 0, 'g', 30); 

wynik:

a: 9338.71 
b: 9338.71 
a: "9338.712001" 
b: "9.3387120010000e+03" 
c: "0.333333333333333314829616256247" 

Ale tak czy inaczej, może teraz to dobry moment, żeby to przeczytać: What Every Computer Scientist Should Know About Floating-Point Arithmetic

+0

Myślę, że mój problem. Dzięki! – user446836

Powiązane problemy