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

问题描述:

我正在寻找从双变量中删除尾随零并将结果赋给双变量。C++:从双变量的小数部分删除尾随零

请注意,

  1. 我对C++ 98
  2. 我不希望打印出来(使用的snprintf,COUT或用printf的%G);我正在寻找删除尾部零并将余数分配回双变量。

输入:双(如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 

我很好的东西,即 - 直接功能裁剪的两倍尾随零和分配剩余回双变量。

OR

  • 转换双为字符串,修剪掉串零并将其转换回正常的两倍。

请帮忙。

+2

嗯......你不能用你描述的方式真正去除数字的数字。如果您不想在字符串表示中使用任何尾随零,只要将它们移除即可。 – InternetAussie

+1

尾部零不影响数字,为什么要删除它们? '1。 == 1.0 == 1.00 == 1.000 == ...'。 – NathanOliver

+0

这里的用例是什么? – CinCout

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

这就像问别人谁拥有十辆汽车,如果他能有十辆汽车在基部16

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

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

When you do int i = 2;是基于十位数的i的值吗?还是二元的?或者它是罗马数字?这不是任何这些事情。这是号码二。你有多少手。

+0

isnt'double x = 1;'和'int y = 1;'两个不同的相同值的表示? – user463035818

+0

嗯我认为我的陈述并不矛盾,你写的是“双重持有价值的类型,而不是表现形式”......在我的情况下,“x”和“y”是两种不同的表示,但我不能让'x'持有相同值的不同表示,只是以相同方式表示的不同值(即“double”)。不知道这是否有任何意义.... – user463035818

+0

错误的实质。 '像双重价值的类型,而不是表示'是很明显的错误。他们当然能够代表价值观。 – SergeyA