使用以下代码,
int main() {
for(;;) {
float d;
cin >> d;
cout << std::to_string(d) << endl;
}
}
to_string
似乎总是返回一个包含小数点后跟六位数的字符串。这种行为是否得到保证(不包括nan
和infinity
)?
根据cplusplus.com的说法,“根据需要编写多个数字来表示整数部分,然后是小数点字符和六个十进制数字”。
to_string
似乎总是返回一个包含小数点后跟六位数的字符串。这种行为是否得到保证(不包括nan
和infinity
)?
是。 std::to_string
的输出由输出std::sprintf
控制,其默认精度为6。
来自http://en.cppreference.com/w/cpp/string/basic_string/to_string,
7,8)将浮点值转换为一个字符串,其内容与
std::sprintf(buf, "%f", value)
为足够大的buf
产生的内容相同。
来自http://en.cppreference.com/w/cpp/io/c/fprintf,(强调我的)
f,F
将浮点数转换为样式[ - ] ddd.ddd中的十进制表示法。
Precision指定小数点字符后出现的最小位数。默认精度为6。
不可以。小数点也可以是逗号,具体取决于运行程序的计算机(由Linux上的$LANG
或Windows上的其他方式控制)。 C ++文档说:
std :: to_string依赖于当前语言环境以进行格式化
这意味着,例如在德国运行,std :: to_string使用逗号,而在美国的计算机上运行时,它使用一个点作为分隔符。要将点强制实施为十进制分隔符,必须在调用to_string之前设置区域设置:
#include <clocale>
std::setlocale(LC_NUMERIC, "C")