【发布时间】:2016-01-12 13:09:15
【问题描述】:
我有一个使用SDL 的C++ 程序。在渲染过程中,我需要绘制一些图形组件。我有时需要将double 变量(四舍五入到小数点后一位)转换为std::string。
为此,我目前正在使用ostringstream 对象,它工作正常。
std::ostringstream ss;
ss << std::fixed << std::setprecision(1) << x;
但是,我想知道这种转换变量的方式在性能方面是否是个好主意。
我尝试用std::to_string(std::round(x * 10) / 10)) 对double 变量进行四舍五入,但没有成功——我仍然得到类似2.500000000 的输出。
- 还有其他解决方案吗?
ostringstream是否会产生高额费用?
【问题讨论】:
-
考虑性能:
ostringstream将使用locale调用一些开销,否则如果您在渲染调用期间重新使用单个ostringstream(单个分配/内部缓冲区的增长) 那么开销不应超过sprintf -
但它不起作用。你应该详细说明。
-
以防万一您真的意思“它不起作用”,您确实使用 C++11 编译器或您的编译器集进行编译到(至少)C++11 标准,是吗?
-
我确实使用 C++11 编译器进行了编译。没有改变任何东西。我仍然将变量设置为 2.500000000(例如)。
-
@Q3SanD:嗯,
std::setprecision肯定会转过头来回答这个问题。删除了我的答案,因为它原来是在吠叫错误的树。
标签: c++ sdl ostringstream