2012-04-24 6 views
6

QString myNumber에 "09338.712001"이 포함되어 있습니다. 내가 할 때 :QString :: toDouble() 잘못된 정밀도로 double을 제공합니다.

myNumber.toDouble();, myNumber.toDouble();, 그것은 9338.71을 반환하지만, 원래 값인 09338.712001이 되길 원합니다. 누구든지 QString 같은 정밀도 toDouble에 의해 반환 된 이중 가져 오는 방법을 알고 있습니까? 감사.

답변

12

아마도이 값을 출력하는 방법에 문제가있을 것입니다.

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); 

결과 :

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

그러나 어쨌든, 어쩌면 지금이이 글을 읽을 수있는 좋은 순간 : What Every Computer Scientist Should Know About Floating-Point Arithmetic

+0

나는 그게 내 문제라고 생각이. 감사! – user446836

관련 문제