【问题标题】:C++ : Remove trailing zeroes from fractional part of double variableC ++:从双变量的小数部分删除尾随零
【发布时间】:2017-09-22 10:12:43
【问题描述】:

我希望从双变量中删除尾随零并将结果分配回双变量。

请注意

  1. 我使用的是 C++ 98。
  2. 我不想打印出来(使用带有 %g 的 snprintf、cout 或 printf);我正在寻找删除尾随零并将余数分配回双变量。

输入:双精度(例如 100.250 或 100.1010 或 100.375)

输出:双倍(100.25、100.101、100.375)

例如

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

例如

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 的尾随零并将余数分配回 double 变量。

  • 将双精度转换为字符串,从字符串中删除零并将其正确转换回双精度。

请帮忙。

【问题讨论】:

  • 嗯...您无法以您描述的方式真正删除数字的数字。如果您不想在字符串表示中出现任何尾随零,只需在它们出现时将其删除。
  • 尾随零不会影响数字,为什么要删除它们? 1. == 1.0 == 1.00 == 1.000 == ....
  • 这里的用例是什么?

标签: c++ trim trailing


【解决方案1】:

double 这样的类型保存值,而不是表示。 100100.0one hundred10x10 都是相同值的不同表示。所以你试图做的是一个没有任何意义的类别错误。

这就像问一个拥有 10 辆汽车的人是否可以在 16 号基地拥有 10 辆汽车。

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

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

当您执行int i = 2; 时,i 中的值是否以十为底?或者它是二进制的?还是用罗马数字?不是那些东西。这是数字二。你的手数。

【讨论】:

  • 不是double x = 1;int y= 1; 相同值的两种不同表示形式吗?
  • hm 我认为我的陈述与您所写的内容并不矛盾。“像双重保持值这样的类型,而不是表示”......在我的情况下,xy 是两种不同的表示,但是我不能让x 持有相同值的不同表示,只是以相同方式表示的不同值(即double)。不确定这是否有意义....
  • 内容有误。 Types like double hold values, not representations 完全错误。他们当然拥有价值观的代表。
  • @SergeyA 如果是这样,您应该能够更改表示,但您不能。例如,如果您在字符串中输入“十”或“10”,则可以使用字符串来保存数字的表示。但是double 不能。如果您将值 10 放入其中,那么它将保持不变,您根本无法更改表示。它保存值 IN 表示。但它所持有的是一个价值。 (严格来说,字符串也是如此。“10”和“10”是字符串的值,但表示数字。)
猜你喜欢
  • 2020-08-09
  • 2015-11-19
  • 2020-09-11
  • 2011-05-30
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多