Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将双精度转换和格式化为QString_C++_String_Qt - Fatal编程技术网

C++ 将双精度转换和格式化为QString

C++ 将双精度转换和格式化为QString,c++,string,qt,C++,String,Qt,我正在尝试向中的QString添加一个双精度字符,以便12.34显示为012.34。如果我有这两个变量: double num = 12.34; QString str = "literal "; 我想将数字附加到字符串中,使其产生literal 012.34 编辑: 格式必须为xxx.xx,即小数点前三位,小数点后两位,始终如此。这是一种要求。我可以简单地在数字前加上零,然后我需要检查数字是否小于100;我不认为这是最好的方式,我可能错了 我在模拟某种气候室。双精度数字表示在-40和150之

我正在尝试向中的QString添加一个双精度字符,以便
12.34
显示为
012.34
。如果我有这两个变量:

double num = 12.34;
QString str = "literal ";
我想将数字附加到字符串中,使其产生
literal 012.34

编辑: 格式必须为xxx.xx,即小数点前三位,小数点后两位,始终如此。这是一种要求。我可以简单地在数字前加上零,然后我需要检查数字是否小于100;我不认为这是最好的方式,我可能错了

我在模拟某种气候室。双精度数字表示在-40和150之间变化的温度结果。我将把构造的字符串写入一个串行设备,而另一个设备上的程序将期望这种格式对其进行处理。我对QT很陌生,对C++也不太擅长,就像我这样学习。

< P>更新< /P> 我建议你读一本

QString zeroString( "0" );
QString( "literal %1%2" ).arg( zeroString ).arg( 12.34, 0, 'f', 2 );
但是您应该指定为什么添加零字符串

QString{ "literal %1" }.arg( 12.34, 6, 'g', -1, '0' )
// Returns "literal 012.34"
这将始终为您提供至少6个字符的输出(5位数字加一个小数点,或6位数字)。或者:

QString{ "literal %1" }.arg( 12.34, 6, 'f', 2, '0' )
// Returns "literal 012.34"
将始终为您提供至少6个字符的输出,其中小数点后始终有两位数字


注意带括号的构造函数调用需要C++11或更高版本,如果无法使用该版本的标准,请切换到使用括号。

的可能重复项不能简单地在字符串前面加上
0
。请解释一下背后的逻辑:为什么需要开头的
0
字符?@vahancho我觉得他可能想要一种通用的双精度格式,比如
%3.2f
printf
。我同意他可能需要详细说明他想要什么。@dwcanillas,hm,但是在十进制数字的左边加上
0
,没有任何意义。让我们看看OP真正需要的是什么。你总是希望(至少)小数点左边有三位数字吗?或者您总是只使用前面的0中的一个(因此您可以只使用
“literal 0”+QString::number(num)
)?请澄清您的确切输出要求。这将不会编译。第二个参数不是字符格式。对不起,我错了。第二个参数是例如0。如果你想以此作为答案,为什么不干脆
QString(“文字0%2”)。arg(12.34,0,'f',2)
?我在想Sime有一个算法,他用它来决定他是否想要那个“0”(或者可能不止一个“0”)。QString(“文字%1%2”)。arg(num@darron添加了示例。@darron C++11对象实例化已改为使用大括号来明确避免“最麻烦的解析”问题。Herbers在这里解释了推送方式:@darron Done。什么时候回答简单问题变得如此困难?让我们来看看。