小数点后提取值

时间:2019-03-15 06:47:14

标签: c++ string

我要在字符串中使用双精度数字,因为我想提取小数点后的值 我发现串联无法正常工作,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);

2 个答案:

答案 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)

  • 使用 std::stod string转换为double
  • 然后使用 std::modf 将浮点值分解为整数和小数部分。

或者在获得double值之后,您可以执行以下操作:

double d = fpValue - (long)fpValue;