我正在使用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 ++的工作方式还是仅仅是我的错误。谢谢。
答案 0 :(得分:2)
double
和float
无法始终准确保存您尝试存储在其中的值,而不是它们的工作方式。在许多情况下,它们会存储一个近似值,通常可以将其四舍五入到您打算存储在那里的值,但不完全一样。这就是为什么你得到这些结果。
答案 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相同的位数。
通常,尝试查找浮点数中的位数会有点无意义,因为它不会存储为十进制数字。