C pow函数的问题

我调试的时候pow(10,3)换成整数变成99....double就是100 这是为什么?
不是很懂,pow出来虽然是double类型,但是又没有小数点,怎么会变成99 pow(10,4)数貌似就是999,以此类推
环境:windows 10,编译器 mingw
编译参数:gcc -Wall -fexec-charset=GBK test.c -o test.exe
两个代码如下

#include <stdio.h>
#include <math.h>
int str2int(const char* str,int len){
    int result=0;
    for(int i=0;i<len;i++){
        result+=(str[len-i-1]-48)*pow(10,i);
    }
    return result;
}

int main(){
    printf("%d\n",str2int("12345",5));//结果为12343
    getchar();
    return 0;
}
//无问题
#include <stdio.h>
#include <math.h>
int str2int(const char* str,int len){
    int result=0;
    for(int i=0;i<len;i++){
        double t=pow(10,i);
        result+=(str[len-i-1]-48)*t;
    }
    return result;
}

int main(){
    printf("%d\n",str2int("12345",5));//12345 正确
    getchar();
    return 0;
}

图片描述
图片描述

阅读 2.3k
1 个回答
新手上路,请多包涵

Ubuntu 下编译你这个程序没有出现你说的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进