我调试的时候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;
}
Ubuntu 下编译你这个程序没有出现你说的问题