提问人:lizakoshy101 提问时间:12/13/2020 更新时间:12/13/2020 访问量:792
将浮点数与字符串连接起来,并四舍五入到小数点后 2 位
Concatenate float with string and round to 2 decimal places
问:
所以我在下面有一个函数,格式化为多态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%
答:
没有必要做任何疯狂的转换。由于该函数称为 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()
评论
std::ostringstream
std::ostringstream os; os << "Percent: " << std::fixed << std::setprecision(2) << numOne / numTwo * 100 << '%'; outStr = os.str();
std::setprecision(2)