2012-04-24 29 views
6

Tôi có một số MyStumber QString chứa "09338.712001". Khi tôi làm:QString :: toDouble() cho tôi gấp đôi với độ chính xác sai

myNumber.toDouble();, trả về 9338,71, nhưng tôi muốn giá trị gấp đôi là giá trị ban đầu, là 09338.712001. Có ai biết làm thế nào để có được gấp đôi trở lại bởi toDouble để có độ chính xác giống như QString? Cảm ơn.

Trả lời

12

Sự cố của bạn có thể là cách bạn xuất các giá trị này.

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

kết quả:

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

Nhưng dù sao, có lẽ tại đó là một khoảnh khắc tốt để đọc: What Every Computer Scientist Should Know About Floating-Point Arithmetic

+0

Tôi nghĩ rằng đó là vấn đề của tôi. Cảm ơn! – user446836

Các vấn đề liên quan