std::to_string

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
操作
搜索
常量
推导指引 (C++17)
非成员函数
I/O
比较
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)    
(C++11)(C++11)(C++11)
to_string
(C++11)
(C++11)
辅助类
 
在标头 <string> 定义
std::string to_string( int value );
(1) (C++11 起)
std::string to_string( long value );
(2) (C++11 起)
std::string to_string( long long value );
(3) (C++11 起)
std::string to_string( unsigned value );
(4) (C++11 起)
std::string to_string( unsigned long value );
(5) (C++11 起)
std::string to_string( unsigned long long value );
(6) (C++11 起)
std::string to_string( float value );
(7) (C++11 起)
std::string to_string( double value );
(8) (C++11 起)
std::string to_string( long double value );
(9) (C++11 起)

转换函数内存在一个足够容纳结果的内部缓冲区 buf

1) 把有符号十进制整数转换为字符串,如同 std::sprintf(buf, "%d", value)
2) 把有符号十进制整数转换为字符串,如同 std::sprintf(buf, "%ld", value)
3) 把有符号十进制整数转换为字符串,如同 std::sprintf(buf, "%lld", value)
4) 把无符号十进制整数转换为字符串,如同 std::sprintf(buf, "%u", value)
5) 把无符号十进制整数转换为字符串,如同 std::sprintf(buf, "%lu", value)
6) 把无符号十进制整数转换为字符串,如同 std::sprintf(buf, "%llu", value)
7,8) 把浮点值转换为字符串,如同 std::sprintf(buf, "%f", value)
9) 把浮点值转换为字符串,如同 std::sprintf(buf, "%Lf", value)
(C++26 前)
1-9) 如同 std::format("{}", value)},转换数值到 std::string
(C++26 起)

参数

value - 需要转换的数值

返回值

包含转换后数值的字符串

异常

可能从 std::string 的构造函数抛出 std::bad_alloc

注解

  • 对于浮点类型, std::to_string 可能产生不期待的结果,因为返回的字符串中的有效位数能为零,见示例。
  • 返回值可以明显地有别于 std::cout 所默认打印的结果,见示例。
  • std::to_string 由于格式化目的依赖本地环境,从而从多个线程同时调用 std::to_string 可能会导致调用的部分序列化结果。 C++17 提供高性能、不依赖本地环境的替用品 std::to_chars
功能特性测试 标准 备注
__cpp_lib_to_string 202306L (C++26) std::format 重新定义 std::to_string

示例

#include <iostream>
#include <string>
 
int main() 
{
    double f = 23.43;
    double f2 = 1e-9;
    double f3 = 1e40;
    double f4 = 1e-40;
    double f5 = 123456789;
    std::string f_str = std::to_string(f);
    std::string f_str2 = std::to_string(f2); // 注意:返回 "0.000000"
    std::string f_str3 = std::to_string(f3); // 注意:不返回 "1e+40".
    std::string f_str4 = std::to_string(f4); // 注意:返回 "0.000000"
    std::string f_str5 = std::to_string(f5);
    std::cout << "std::cout: " << f << '\n'
              << "to_string: " << f_str  << "\n\n"
              << "std::cout: " << f2 << '\n'
              << "to_string: " << f_str2 << "\n\n"
              << "std::cout: " << f3 << '\n'
              << "to_string: " << f_str3 << "\n\n"
              << "std::cout: " << f4 << '\n'
              << "to_string: " << f_str4 << "\n\n"
              << "std::cout: " << f5 << '\n'
              << "to_string: " << f_str5 << '\n';
}

输出:

std::cout: 23.43
to_string: 23.430000
 
std::cout: 1e-09
to_string: 0.000000
 
std::cout: 1e+40
to_string: 10000000000000000303786028427003666890752.000000
 
std::cout: 1e-40
to_string: 0.000000
 
std::cout: 1.23457e+08
to_string: 123456789.000000

参阅

转换整数或浮点值为 wstring
(函数)
(C++11)(C++11)
转换字符串为无符号整数
(函数)
(C++11)(C++11)(C++11)
转换字符串为有符号整数
(函数)
(C++11)(C++11)(C++11)
转换字符串为浮点值
(函数)
(C++17)
转换整数或浮点值到字符序列
(函数)