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

问题描述 投票:1回答:2

使用以下代码,

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

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

根据cplusplus.com的说法,“根据需要编写多个数字来表示整数部分,然后是小数点字符和六个十进制数字”。

c++ c++11
2个回答
3
投票

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中的十进制表示法。

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


0
投票

不可以。小数点也可以是逗号,具体取决于运行程序的计算机(由Linux上的$LANG或Windows上的其他方式控制)。 C ++文档说:

std :: to_string依赖于当前语言环境以进行格式化

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

#include <clocale>
std::setlocale(LC_NUMERIC, "C")
© www.soinside.com 2019 - 2024. All rights reserved.