将值存储到具有相同精度C ++的双向量中

时间:2013-11-17 04:06:57

标签: c++ vector floating-point-precision

这是我的问题。我有一个向量suct该向量,并在一些操作后,我将一些双值存储到此向量。但是,我希望他们都有相同的小数点数字。我的意思是,如果要存储的第一个值是 4.143 ,第二个值是 67.32 ,第三个值是165,那么我想将它们存储为 004.143 067.320 * 165.000 *。有什么方法可以做到吗?提前致谢

2 个答案:

答案 0 :(得分:1)

您似乎对

显示值时,您可以使用String.format()System.out.printf()将值格式化为指定的宽度和小数位数。

例如:

double a = 4.143;
double b = 67.32;
double c = 165;
System.out.printf("%07.3f %07.3f %07.3f", a, b, c);

打印:

004.143 067.320 165.000

编辑:所以它是C ++(对不起;我整天都在回答Java问题)。这同样适用,但printf()stringstreamostream用于格式化。概念是一样的。

至于下面的评论:“034.1”和“34.1”是相同的值。它们以任何一种语言存储相同。填充0是显示功能,而不是存储功能。基数排序传统上涉及整数;你可以通过例如将你的值转换为整数。乘以1000(或其他),然后只需使用数学来获得数字。例如:

double value1 = 0.124; 
double value2 = 53.0;

printf("%i\n", (int)(value1 * 1000.0) % 10);
printf("%i\n", (int)(value2 * 1000.0) % 10);

打印4和0(千分之一位数)。对于基数排序,在比较两个键时,请适当地计算和比较数字。

答案 1 :(得分:1)

float类型以这种方式命名,因为它代表浮动点数。如果你不想存储固定位置的数字,你必须设计自己的类(或使用someone else made)。别无他法。

但是 - 如果你只关心浮点数在内存中的存储方式不同,这取决于点的位置,那么你就错了。无论点在哪里,编码都是一样的。您应该阅读IEEE 754标准。

您还可以使用stringstreamfloat写入具有固定精度的std::string

当然,如果您只是关注显示,其他人已在回复中明确表示。