【发布时间】:2012-10-26 10:31:03
【问题描述】:
我需要一个降低双打精度(位数)的函数。
我需要它来计算,而不是在屏幕上输出。
到目前为止,我所拥有的是:
double setDigits(double _number, int _digits)
{
double tenth = pow((double)10,_digits);
_number *= tenth;
_number = floor(_number);
_number /= tenth;
return _number;
}
调用 setDigits(sqrt(2),3) 得到 1.4139999999999999,而不是我想要的 1.414。
我能做什么?
【问题讨论】:
-
1e-16 的差异对您的计算是否真的很重要? 1.414 没有精确的二进制表示,所以当你使用它时它永远不会是 1.414。所以如果 1e-16 的错误是不可接受的,你应该去四精度。
-
您应该认真考虑浮点是如何工作的,以及这是否适合您。无法保证您实际上可以用二进制浮点表示您期望的数字。例如,如果您使用金钱,请考虑仅使用整数并存储美分而不是美元。
-
_decimals来自哪里? -
本意是在比较值时使用它,所以我不知道确切的数字(我的一些数字推迟到 1E-7,这种精度不相关),我会四舍五入它们,以便于比较。
使用浮点数解决了我的问题。
标签: c++ function double precision digit