将双精度数转换为QString

65

我正在使用Qt编写程序。我想在C++中将一个double转换为QString


@Macmade,我是QT和CPP的新手。但我有一个Java代码,所以我想将其转换为用于QT应用程序的CPP。 - Nagaraju
5个回答

110

使用 QString 的 number 方法(文档在这里):

double valueAsDouble = 1.2;
QString valueAsString = QString::number(valueAsDouble);

这个很烦人,因为精度是固定的。 - ManuelSchneid3r
1
注意:该调用可能导致精度损失。例如,我曾经进行了相同的调用,并从6844418.0得到了6.84442e+06。它们是度量 UTM 坐标,因此10米的损失是不可接受的。请根据应用程序小心使用。我使用了 std::stringstream ss; ss << std::setprecision( 12 ); ss << (double)value;在这个东西里如何标记代码块? - Paulo Carvalho
@PauloCarvalho 使用QLocale :: FloatingPointShortest(自Qt 5.7以来可用) - syockit
注意:对于“g”和“G”格式,精度表示最大有效数字位数(尾随零将被省略)。例如,1.0将转换为“1”。 - kslavka

18

我会使用QLocale::toString(),而不是QString::number(),这样可以获得基于语言环境的分组分隔符,例如德语中的“1.234.567,89”。


2
不总是这样。我需要转换为美国系统(48.1),这会搞乱事情。 - Michał Leon

15

在@Kristian的回答基础上,我希望显示一个固定数量的小数位。这可以通过QString :: number(...)函数中的其他参数来实现。例如,我想要3个小数位:

double value = 34.0495834;
QString strValue = QString::number(value, 'f', 3);
// strValue == "34.050"

'f'指定了十进制格式表示法(更多信息在此处,您还可以指定科学计数法),3指定精度(小数位数)。可能已经在其他答案中链接过,但有关QString::number函数的更多信息可以在QString文档中此处找到。


9
您可以使用arg(),如下所示:
double dbl = 0.25874601;
QString str = QString("%1").arg(dbl);

这样可以解决其他函数(如setNum()和number())中的“固定精度”问题,这些函数将生成随机数以完成定义的精度。

根据文档“转换使用默认地区设置”,对于“QString::number”,精度默认值也为-1而不是6。 - ymoreau

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接