【问题标题】:extract value after decimal提取小数点后的值
【发布时间】:2019-03-15 06:47:13
【问题描述】:

我在字符串中取一个双数,因为我想在小数部分之后提取它的值 我发现连接在这里无法正常工作 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);

【问题讨论】:

  • 敢问flag的意义何在?
  • 除非我理解错了,否则做x-(int)x(例如)不是更容易吗?

标签: c++ string


【解决方案1】:

我不确定我是否正确理解了你,但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));
}

【讨论】:

    【解决方案2】:
    • 使用 std::stodstring 转换为double
    • 然后使用std::modf将浮点值分解为整数和小数部分。

    或者在获得double值之后,你可以这样做:

    double d = fpValue - (long)fpValue;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-12
      • 2017-08-31
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多