将浮点数与字符串连接起来,并四舍五入到小数点后 2 位

Concatenate float with string and round to 2 decimal places

提问人:lizakoshy101 提问时间:12/13/2020 更新时间:12/13/2020 访问量:792

问:

所以我在下面有一个函数,格式化为多态void display(string&outStr)。这个函数的输出基本上应该格式化为一个大字符串,该字符串将保存到 outStr 参数中并返回给调用函数。

我已经成功地将我的大字符串格式化为多行,但我想将我的浮点值四舍五入到小数点后 2 位,但我无法弄清楚我目前如何附加字符串。我尝试使用在线一些帖子建议的 round() 和 ceil() 函数,但每个小数位后仍然出现 6 个零。我将不胜感激,因为我一直在寻找解决方案,但没有一个奏效。

此外,我想知道我用来将浮点数转换为字符串的 to_string() 函数是否会在 C++98 中正确编译和执行?我正在使用 C++11,但我的老师正在使用 C++98,我非常担心它无法在她这边编译。

如果没有,谁能建议我如何实现将浮点数转换为字符串的相同结果,同时仍将多行格式化为 outStr 字符串参数并将其返回给函数?我不允许更改函数的参数,它必须保留为 display(string& outStr)

我的输出要长得多,也复杂得多,但我简化了示例,以便获得一个简短而简单的解决方案。

再次,我将不胜感激!

#include <iostream>
using namespace std;
#include <string>
#include <sstream>
#include <cmath>
#include "Math.h"

void Math::display(string& outStr){
    float numOne = 35;
    float numTwo = 33;
    
    string hello = "Hello, your percent is: \n";
    outStr.append(hello);
    string percent = "Percent: \n";
    outStr.append(percent);
    float numPercent = ceil(((numOne / numTwo) * 100) * 100.0) / 100.0;
    outStr.append(to_string(numPercent));
    outStr.append("\n");
        
}

输出应如下所示:

Hello, your percent is:
Number:
106.06%
C++ 字符串 附加 舍入 按引用传递

评论

0赞 Igor Tandetnik 12/13/2020
您可能正在寻找 .如std::ostringstreamstd::ostringstream os; os << "Percent: " << std::fixed << std::setprecision(2) << numOne / numTwo * 100 << '%'; outStr = os.str();
0赞 lizakoshy101 12/13/2020
有没有办法在该语句中将浮点数四舍五入到小数点后两位?
0赞 Igor Tandetnik 12/13/2020
就是这样。你试过吗?它在哪些方面无法满足您的要求?std::setprecision(2)

答:

1赞 sweenish 12/13/2020 #1

没有必要做任何疯狂的转换。由于该函数称为 display,我的猜测是它实际上应该显示值,而不仅仅是将其保存到字符串中。

下面的代码演示了如何通过设置打印格式来实现此目的。

#include <cstdio>
#include <iomanip>
#include <iostream>

int main() {
  double percentage = 83.1415926;
  std::cout << "Raw: " << percentage << "%\n";
  std::cout << "cout: " << std::fixed << std::setprecision(2) << percentage << "%\n";
  printf("printf: %.2f\%%\n", percentage);  // double up % to print the actual symbol
}

输出为:

Raw: 83.1416%
cout: 83.14%
printf: 83.14%

如果函数像您描述的那样向后,则有两种可能性。你不明白实际需要什么,并且给了我们一个糟糕的解释(我的猜测是函数签名),或者赋值本身是纯粹的垃圾。尽管 SO 喜欢对教授大发雷霆,但我很难相信你描述和写的就是教授想要的。这毫无意义。

几点说明:您展示的代码没有任何多义性。 从 C++11 开始存在,通过查找函数 (Link) 很容易看到。您的代码尝试打印的内容与输出的内容之间也存在差异,这甚至在我们进入数字格式化部分之前。“百分比”还是“数字”?to_string()