2012-04-24 25 views
6

QString myNumberに "09338.712001"が含まれています。私がするとき:QString :: toDouble()が誤った精度で倍精度を返す

myNumber.toDouble();、それは9338.71を返しますが、私は倍を元の値、09338.712001にします。 QStringと同じ精度を持つtoDoubleによって返されるdoubleを取得する方法を知っている人はいますか?ありがとう。

答えて

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