C ++:从double变量的小数部分删除尾随零

时间:2017-04-25 11:53:40

标签: c++ trim trailing

我希望从double变量中删除尾随零,并将结果返回给double变量。

请注意

  1. 我在C ++ 98上。
  2. 我不打算打印出来(使用带有%g的snprintf,cout或printf);我希望删除尾随零并将余数分配回双变量。
  3. 输入:加倍(例如100.250或100.1010或100.375)

    输出:double(100.25,100.101,100.375)

    e.g

    double Price = 100.250;
    double convert = TrimZeros(100.250);
    // convert = 100.25
    
    • 我尝试将double转换为stringstream,并修剪该字符串的尾随零。但是在修剪之后我无法将其转换回双倍(具有所需的精度)。

    e.g。

    double Price = 100.250;
    ostringstream osPrice;
    osPrice << fixed << Price;
    string cPrice = TrimString(osPrice.str()); // my function to trim trailing zero of string
    //cPrice = "100.25"
    
    // Now When I try to convert cPrice back to double, it adds extra zeros i.e. 100.250000
    

    我对任何事都没问题,即 - 一个直接函数,用于修剪double的尾随零,并将余数分配回双变量。

    OR

    • 将double转换为String,从字符串中修剪零并将其正确转换为double。

    请帮助。

1 个答案:

答案 0 :(得分:2)

类似double的类型包含值,而不是表示形式。 100100.0以及one hundred10x10都是相同值的不同表示形式。所以你要做的是一个没有任何意义的类别错误。

这就像问一个拥有十辆汽车的人,如果他可以在16号基地拥有十辆汽车。

// Now When I try to convert cPrice back to double, it adds extra zeros i.e. 100.250000

显示你是如何确定的。因为这是不可能的。价值将是一百零四分之一。您可以出于自己的目的以任何方式表示。

当您int i = 2;时,{10}中的值为i?还是二进制?还是用罗马数字?这不是任何事情。它是数字两个。你拥有的牌数。