给我双倍的错误的精度。

时间:2022-09-15 15:27:13

I have a QString myNumber containing "09338.712001". When I do:

我有一个QString myNumber包含“09338.712001”。当我做:

myNumber.toDouble();, it returns 9338.71, but I want the double to be the original value, which is 09338.712001. Does anyone know how to get the double returned by toDouble to have the same precision as the QString? Thanks.

myNumber.toDouble();它返回9338.71,但我想要将double值作为原始值,即09338.712001。有没有人知道如何让double返回的精度与QString的精度相同?谢谢。

1 个解决方案

#1


12  

Your problem probably is in how you output these values.

您的问题可能在于如何输出这些值。

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

result:

结果:

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

But anyways, maybe now it's a good moment to read this: What Every Computer Scientist Should Know About Floating-Point Arithmetic

但不管怎样,也许现在是读这篇文章的好时机:每个计算机科学家都应该知道浮点运算。

#1


12  

Your problem probably is in how you output these values.

您的问题可能在于如何输出这些值。

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

result:

结果:

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

But anyways, maybe now it's a good moment to read this: What Every Computer Scientist Should Know About Floating-Point Arithmetic

但不管怎样,也许现在是读这篇文章的好时机:每个计算机科学家都应该知道浮点运算。