我要在字符串中使用双精度数字,因为我想提取小数点后的值
我发现串联无法正常工作,str2+=str[n-i]
怎么了?
string str;
cin>>str;
int flag=0;
string str2="";
int n=str.length();
for(int i=0;i<n;i++){
if(str[n-i]=='.'){
flag=1;
break;
}
str2+=str[n-i];
cout<<str2;
}
reverse(str2.begin(),str2.end());
int m = stoi(str2);
答案 0 :(得分:2)
我不确定我是否理解正确,但是here有人问您在问什么。
我考虑过这样做:
#include <iostream>
using namespace std;
int main()
{
double num1=2.323441;
double num2=num1-(int)num1;
cout<<num2;
return 0;
}
打印结果:0.323441
但是,这不能给出您的预期结果,我认为是:323441
。
那么我想有两种可能的解决方案:
第一个,“脏”和简单的一个是您得到的数字,将其乘以10 *的长度:如果有5个小数,则将其乘以100000。这样,您将得到将0.323441
转换为323441
。
第二个使用的舍入和幂次:
int fractional_part_as_int(double number, int number_of_decimal_places) {
double dummy;
double frac = modf(number,&dummy);
return round(frac*pow(10,number_of_decimal_places));
}
答案 1 :(得分:1)