我需要“砍掉”一个'双',这样他就会在点后有3位数字(不是四舍五入,只是切掉其他所有东西)。
这是我的代码:
double multiply_by = (pow(10.0, _digits_percision));
_number = (_number * multiply_by);
_number = (int) _number;
_number = (_number / multiply_by);
当我输入1.001时,我的输出(执行此代码后)为1。 当我的输入是1.007时,我的输出是1.006。 它只发生在1.xxx 有任何想法吗? 感谢。
答案 0 :(得分:2)
您的计算机正在使用基本2浮点表示。输入1.007时,计算机会将其转换为最接近的可能表示形式。它不能完全代表1.007。该表示形式类似于1.0069999999999999。乘以1000得到1006.9999999999999。转换为int产生1006。
顺便说一句,这不会发生在1.xxx形式的数字上。你还没有尝试过足够的案例。 <强>附录强>
我们今天有一个非常相似的问题。不要在这里重复我的回答,而是看看我对Returning double with precision的回答。
答案 1 :(得分:1)
首先阅读floating point numbers。如果要将数字截断为N 十进制点并将其存储在二进制表单中,则可能会出现某些输入错误。