从字符串中解析指数表示法中的整数
parsing integer in exponential notation from string
显然,std::stoi
不接受用指数表示整数的字符串,比如"1e3"
(=1000)。有没有一种简单的方法可以将这样的字符串解析为整数?人们可能会认为,由于这种表示法在C++源代码中有效,因此标准库有一种解析方法。
您可以使用stod
(请参阅文档),首先将其解析为双精度不过在回投时要注意精度问题
#include <iostream> // std::cout
#include <string> // std::string, std::stod
int main () {
std::string text ("1e3");
std::string::size_type sz; // alias of size_t
double result = std::stod(text,&sz);
std::cout << "The result is " << (int)result << std::endl; // outputs 1000
return 0;
}
人们可能会认为,由于这种表示法在C++源代码中有效,因此标准库有一种解析方法。
库和编译器是不相关的。这种语法在C++中起作用的原因是,该语言允许您将类型为double
的表达式分配给整数变量:
int n = 1E3;
将double
表达式(即类型为double
的数字文字)分配给整数变量。
知道这里发生了什么,你应该能够很容易地在标准C++库中识别出你需要的函数。
您可以使用标准流(例如)将其读取为双精度
double d;
std::cin >> d; //will read scientific notation properly
然后将其强制转换为int,但显然double可以表示比int多得多的值,所以要小心。
向std::stoi
中发出指数表示法会经常溢出,C++中的整数溢出是未定义的行为。
你需要建立你自己的,你可以泰勒的边缘情况,以满足你的具体要求。
我倾向于不走std::stod
路线,因为如果double
的整体部分不能用int
表示,从double
到int
的转换是未定义的行为。
相关文章:
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
- 浮点数中整数的精确表示形式
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 给定一个整数,将其表示为平方和
- 整数文本太大,无法用任何整数类型表示--C++
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 如何在以 256 为基数的唯一 xLen-digit 表示中写一个整数 x?
- 升序,三个整数表示C++
- 编译器C++如何在二进制代码中表示整数
- 将表示位置的整数分解为多个部分,然后再返回
- 计算表示有符号整数所需的最小字节数
- 整数数组元素,前导 0 表示垃圾输出
- 获取所有方式以两个整数的产品表示数字
- 为什么对Chrono :: Nanseconds的表示类型是签名的整数类型
- 用位表示整数类型大小的元程序
- 使用 cin.fail() 表示整数与地板
- 我有一个类来表示整数,我想区分磅和公斤,我该怎么做
- 使用布尔值表示整数