string 和 double 有问题,相等后得到另一个数字

Troubles with string and double, get another number after equating

计算完一个数后,我需要得到这个数的几位数字。我将它转换为字符串,并打印一个数字,但在一段代码中,它工作正常(只打印一个数字),但在我将它等同于另一个变量后,程序打印 2 个数字。

#include "stdafx.h"
#include <iostream>
#include <chrono>
#include <ctime>    
#include <sstream>

using namespace std;
int main()
{
    time_t seconds;
    int res = 0;
    seconds = time(NULL);
    double nump = seconds;
    cout.precision(45);
    for (int i = 1; i <= 100; i++) {
        nump = nump /10;
    }
    std::ostringstream strs;
    strs.precision(55);
    strs << nump;
    std::string str = strs.str();
    cout << str[str.size() - 9] << endl; // here we get a gidit from the string (e.g. 5)
    res = str[str.size() - 9];
    cout << res << endl; // here we get a number (e.g. 49)
    system("pause");
    return 0;
}

我不明白这是怎么回事。请帮忙!

那是因为这里

res = str[str.size() - 9];

您正在将 char 的值存储在 int 中。打印与 int 相同的值时,将其发送到 std::cout 与将其打印为 char 时可能会产生不同的结果。对于整数,改为调用 this operator is called, while for chars this 运算符。

在您的示例中,您的值可能为 '1'(在 ASCII 中为 49)。当您将其打印为 char 时,它会打印 1,当您将其打印为 int 时,它会打印 49.

解决此问题的一种方法是将 int res 改为 char