计算双C ++中的位数

时间:2015-03-13 01:58:13

标签: c++

我正在使用while循环来计算输入中的位数。

所以我的输入是1.525

length = 0;
num = num - int(num);
while ( num >= .0001 ) {
    num = num * 10;
    length = length + 1;
    num = num - int(num); }

当我做的时候

cout << "\n\nLength: " << length << "\n";

我得到的答案是51,其他数字给我一个49或者其他明显错误的东西。 这是c ++的工作方式还是仅仅是我的错误。谢谢。

3 个答案:

答案 0 :(得分:2)

doublefloat无法始终准确保存您尝试存储在其中的值,而不是它们的工作方式。在许多情况下,它们会存储一个近似值,通常可以将其四舍五入到您打算存储在那里的值,但不完全一样。这就是为什么你得到这些结果。

答案 1 :(得分:2)

您可以使用字符串或字符数组来存储输入的数字。它可以精确计算长度。 float double存储一个近似值,你可以参考here

答案 2 :(得分:0)

浮点数不能精确地存储十进制数1.525,但是如果你使用round而不是int cast并使用fabs来比较容忍以防止负数,你会得到一些你可能会感到高兴的东西用:

num -= round(num);
while(fabs(num) >= .0001) {
  num *= 10;
  ++length;
  num -= round(num); 
}

如果您乐意接受1.9999999与2.0相同的位数。

通常,尝试查找浮点数中的位数会有点无意义,因为它不会存储为十进制数字。