【发布时间】:2012-11-21 02:37:46
【问题描述】:
今天试用了C++11 STL的一些新功能,遇到std::to_string。
可爱,可爱的一组功能。为一个双字符串转换创建一个字符串流对象对我来说总是有点过头了,所以我很高兴我们现在可以做这样的事情:
std::cout << std::to_string(0.33) << std::endl;
结果?
0.330000
我对此并不完全满意。有没有办法告诉std::to_string 省略尾随零?我搜索了互联网,但据我所知,该函数只接受一个参数(要转换的值)。回到使用字符串流的“过去”,您可以设置流的宽度,但我宁愿不转换回来。
之前有人遇到过这个问题/有解决方案吗?一些 StackOverflow 搜索结果一无所获。
(C++11 STL 参考:http://en.cppreference.com/w/cpp/string/basic_string/to_string)
【问题讨论】:
-
@chris:不是在致电
std::to_string之后。它返回一个字符串,而不是一个数字,而且它的格式似乎很难修改。 -
@rubenvb,射击,我的想法不对,是不是……
-
“可爱的,可爱的一组函数。创建一个字符串流对象只用于一次双字符串转换对我来说总是有点过分”。然后你就会明白为什么它不是真的矫枉过正——它是包含所有用于指定格式的基础设施的流。为了得到你想要的,
to_string必须在一个等效的 API 中复制所有这些。这可能不是一个糟糕的想法,但这不是委员会的想法。to_string之所以可爱,是因为它没有选项 ;-) -
@Steve:是的,我可以看到它们来自哪里。我宁愿 to_string(double/float) 默认不附加任何尾随零,如果需要的话让你使用字符串流。但这涉及到偏好问题。
-
@Frishert:是的。我将这些功能视为快速而肮脏的输出器,用于记录或输出打算由机器使用。不幸的是,对于漂亮的格式,您通常必须自己动手。