在c++中截断数字(点之后)

Chopping of digits (after the dot) in C++

本文关键字:之后 数字 c++      更新时间:2023-10-16

我需要"剁掉"一个'double',这样点后面就会有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什么好主意吗?谢谢。

您的计算机正在使用以2为基数的浮点表示。当你输入1.007时,计算机将其转换为最接近的表示形式。它不能精确地表示1.007。它的表示形式类似于1.0069999999999999。乘以1000,得到1006.9999999999999。转换为int类型产生1006。

顺便说一句,这不会只发生在1.xxx形式的数字上。你只是没有试过足够的案子。

附录
今天我们遇到了一个非常相似的问题。与其在这里重复我的答案,不如看看我对精确返回double的回答。

从阅读浮点数开始。如果您想将一个数字截断为N个十进制点,并将其存储在二进制形式中,则可能会对某些输入产生错误。