C++ 对字符串索引取值转double做除法得到错误结果问题
问题原因
你代码的问题出在对字符类型的取值逻辑理解有误:
- C++ 中
std::string存储的单个元素是char类型,字符'2'实际存储的是对应的ASCII编码值50,而非字面数值2 - 你直接将
char类型的y[0]赋值给double变量时,实际赋值的是ASCII值50,所以50 / 10.0的计算结果为5,和你预期的0.2不符
解决方法
要获取字符对应的字面数值,只需要用当前字符减去字符'0'的ASCII值即可,数字字符的ASCII编码是连续排列的,该方法可以稳定拿到0~9的对应整数值。
修正后的代码如下:
#include <iostream> using namespace std; int main() { string y = "2"; double x = y[0] - '0'; cout << x / 10.0 << endl; }
运行上述代码可以得到预期的输出0.2。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

