std::to_string是否保证在转换浮点值时包含小数点

Is std::to_string guaranteed to include a decimal point when converting floating point values?

本文关键字:包含 小数点 转换 to string 是否 std      更新时间:2023-10-16

使用以下代码,

int main() {
    for(;;) {
        float d;
        cin >> d;
        cout << std::to_string(d) << endl;
    }
}

to_string似乎总是返回一个包含小数点和六位数字的字符串。这种行为有保证吗(不包括naninfinity)?

根据cplusplus.com,"根据需要写尽可能多的数字来表示整数部分,后面是小数点字符和六位小数"。

to_string似乎总是返回一个包含小数点和六位数字的字符串。这种行为有保证吗(不包括naninfinity)?

是的。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.格式将浮点数转换为十进制表示法

精度指定小数点字符后出现的最小位数默认精度为6


洞穴

小数点并不是在所有区域设置中都用作小数标记。根据区域设置,您可能会为十进制标记获取不同的字符。但无论区域设置如何,都会有一个十进制标记。

否。小数点也可以是逗号,这取决于运行程序的计算机(在Linux上由$LANG控制,在Windows上由其他方式控制)。C++文档中写道:

std::to_string依赖于当前区域设置进行格式化

这意味着,例如在德国运行时,std::to_string使用逗号,而在美国的计算机上运行时,它使用点作为分隔符。要强制使用句点作为小数分隔符,必须在调用To_string:之前设置区域设置

#include <clocale>
std::setlocale(LC_NUMERIC, "C")