将浮点数与字符串连接并舍入到小数点后 2 位
Posted
技术标签:
【中文标题】将浮点数与字符串连接并舍入到小数点后 2 位【英文标题】:Concatenate float with string and round to 2 decimal places 【发布时间】:2021-03-24 00:23:47 【问题描述】:所以我在下面有一个格式化为多态 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%
【问题讨论】:
您可能正在寻找std::ostringstream
。如std::ostringstream os; os << "Percent: " << std::fixed << std::setprecision(2) << numOne / numTwo * 100 << '%'; outStr = os.str();
有没有办法将该语句中的浮点数四舍五入到小数点后两位?
std::setprecision(2)
就是这样做的。你试过了吗?它在哪些方面未能满足您的要求?
【参考方案1】:
无需进行任何疯狂的转换。由于该函数被称为显示,我的猜测是它实际上应该显示该值,而不是仅仅将其保存到一个字符串。
以下代码演示了如何通过格式化打印来完成。
#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) 很容易看到。您的代码尝试打印的内容与您的输出内容之间也存在差异,这甚至在我们进入数字格式部分之前。 “百分比”还是“数字”?
【讨论】:
以上是关于将浮点数与字符串连接并舍入到小数点后 2 位的主要内容,如果未能解决你的问题,请参考以下文章