小数点后提取值

extract value after decimal

本文关键字:提取 小数点      更新时间:2023-10-16

我在字符串中进行双重数字,因为我想在小数零件之后提取其值我发现串联在这里无法正常工作,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);

我不确定我是否适当地了解您,但是在这里有人问您在问什么。

我想这样做:

#include <iostream>
    using namespace std;
    int main()
    {
        double num1=2.323441;
        double num2=num1-(int)num1;
        cout<<num2;
        return 0;
    }

打印结果:0.323441

但这并不能给您预期的结果,我认为这是:323441

然后我想有2种可能的解决方案:

第一个,'脏'''''''''''''''是您获得的数字,将其乘以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));
}
  • 使用 std::stod string转换为double
  • 然后使用 std::modf 将浮点值分解为积分和分数零件。

或获得double值后,您可以做:

double d = fpValue - (long)fpValue;