将浮点数与字符串连接起来并四舍五入到小数点后两位
Concatenate float with string and round to 2 decimal places
所以我有一个格式化为多态无效显示(string& outStr)的函数。此函数的输出基本上应格式化为一个大字符串,该字符串将保存到 outStr 参数并返回给调用函数。
我已经成功地将我的大字符串格式化为多行,但我想将我的浮点值四舍五入到小数点后两位,但我无法弄清楚我当前附加字符串的方式。我尝试按照一些在线帖子的建议使用 round() 和 ceil() 函数,但每个小数位后仍然出现 6 个零。我将不胜感激,因为我一直在寻找解决方案一段时间,但其中 none 已经奏效。
此外,我想知道我用来将浮点数转换为字符串的 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%
无需进行任何疯狂的转换。由于该函数称为显示,我的猜测是它实际上应该 显示 值而不是将其保存到字符串中。
以下代码演示了如何通过设置打印格式来实现这一点。
#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 喜欢嘲笑教授,但我很难相信你所描述和写的是教授想要的。没有意义。
一些注意事项:您显示的代码没有任何多态性。 to_string()
从 C++11 开始存在,通过查找函数 (Link) 很容易看出这一点。您的代码尝试打印的内容与您的输出内容之间也存在差异,而且在我们到达数字格式部分之前。 “百分比”还是“数字”?
所以我有一个格式化为多态无效显示(string& outStr)的函数。此函数的输出基本上应格式化为一个大字符串,该字符串将保存到 outStr 参数并返回给调用函数。
我已经成功地将我的大字符串格式化为多行,但我想将我的浮点值四舍五入到小数点后两位,但我无法弄清楚我当前附加字符串的方式。我尝试按照一些在线帖子的建议使用 round() 和 ceil() 函数,但每个小数位后仍然出现 6 个零。我将不胜感激,因为我一直在寻找解决方案一段时间,但其中 none 已经奏效。
此外,我想知道我用来将浮点数转换为字符串的 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%
无需进行任何疯狂的转换。由于该函数称为显示,我的猜测是它实际上应该 显示 值而不是将其保存到字符串中。
以下代码演示了如何通过设置打印格式来实现这一点。
#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 喜欢嘲笑教授,但我很难相信你所描述和写的是教授想要的。没有意义。
一些注意事项:您显示的代码没有任何多态性。 to_string()
从 C++11 开始存在,通过查找函数 (Link) 很容易看出这一点。您的代码尝试打印的内容与您的输出内容之间也存在差异,而且在我们到达数字格式部分之前。 “百分比”还是“数字”?