在c++中截断数字(点之后)
Chopping of digits (after the dot) in C++
我需要"剁掉"一个'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个十进制点,并将其存储在二进制形式中,则可能会对某些输入产生错误。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 计算十进制 c++ 之后的数字
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何在向量中某个数字之后重新计算进程
- 预期输出之后的所有这些数字是多少
- 在获取从文件到矢量的每一行之后,数字将被更改或销毁
- C++ 在地板函数之后以十六进制打印数字
- 在每个偶数特定数字之后,插入向量中
- 如何在C ++中打印特定位数的位数?例如,总共打印8位数字(小数点之前+之后的组合)
- C :Bool方法在COUT语句之后返回意外数字
- 小数点之后,如何指定有多少个数字
- C 如何在文件中的特定字符串之后获取数字
- std::queue::size() 可以在 size() == 0 的 pop() 之后返回一个巨大的数字
- 如何从 9 和 90 中提取 2.9 和 2.09,即获取数字等于最大编号的小数部分.二分位数之后的数字
- 默认值仅适用于 8 和 9.之后,它使用第一个数字并将其视为 1,2,3
- 在waitpid()之后来自WTERMSIG宏的异常信号数字
- 如何在第 "." 点之后将数字放入数组中
- 仅读取文本文件中的数字并存储在数组中.之后,读取第一行来存储在数组中
- 在c++中截断数字(点之后)
- 如何在读取文本文件时跳到每行最后一个数字之后的下一行