输出除法结果,包括小数点后的数字 - Qt
Posted
技术标签:
【中文标题】输出除法结果,包括小数点后的数字 - Qt【英文标题】:Output division result including digits after decimal - Qt 【发布时间】:2018-03-09 10:05:44 【问题描述】:很抱歉,如果这里已经回答,但我找不到我正在寻找的确切解决方案。
我正在尝试输出两个不断变化的变量相除的结果。结果可能在 0.00 到 100.12314235234523 之间变化(不完全是这样,我只是想给你一个想法)。我想只打印小数点后2位的结果,如果小数点后没有任何内容,它应该在小数点后打印2个零。
例如:
10 / 5 = 2.00
23 / 6 = 3.83
我不需要对结果进行四舍五入,例如,如果输出是:73.4869999,我不需要它是 73.49,我可以使用 73.48。
到目前为止我写的是:
packet_loss[2]->setText(QString("%1%2%3").arg(((data.packet_loss_tx) * 100) / data.packets_tx).
arg(locale.decimalPoint()).
arg((((data.packet_loss_tx) * 100) % data.packets_tx), 2, 10, QChar('0')));
但这会打印小数点后的所有值。我可以将这部分arg((((data.packet_loss_tx) * 100) % data.packets_tx)
划分为 10、100 或 1000,以减少小数点后的小数位数,但这是一个每秒变化的变量。因此,如果输出为小数点后 3 位,我将其除以 10,我将得到正确的输出,但下一个值可能是小数点后 5 位,除以 10 将得到小数点后 4 位。我希望最终输出只显示小数点后 2 位。
【问题讨论】:
QString::number(100.12914235234523, 'f', 2)
会给你“100.13”。
@vahancho,如果我这样写代码:QString::number(((data.packet_loss_tx) * 100) / data.packets_tx), 'f', 2)
,它只会给我xxx.00
。它没有给我小数点后的实际数字。
不是因为你把它乘以整数值(100)吗?尝试改用 100.0。
@vahancho,谢谢。那解决了它。这是一个愚蠢的问题。您能否添加评论作为答案?我会接受的。
【参考方案1】:
您可以尝试使用具有特定格式选项(两位数精度)的QString::number()
函数。例如:
auto s = QString::number(100.12914235234523, 'f', 2); // Gives "100.13"
此外,如果您使用浮点数,最好也将它们与浮点数相乘。 IE。您需要使用 100.0 而不是整数值 100 来执行计算。
【讨论】:
以上是关于输出除法结果,包括小数点后的数字 - Qt的主要内容,如果未能解决你的问题,请参考以下文章