【发布时间】:2012-01-06 12:59:21
【问题描述】:
我搜索了整个网络,但找不到解决问题的方法。我只是想要一个像 MS Excel 那样对 double 值进行舍入的函数。这是我的代码:
#include <iostream>
#include "math.h"
using namespace std;
double Round(double value, int precision) {
return floor(((value * pow(10.0, precision)) + 0.5)) / pow(10.0, precision);
}
int main(int argc, char *argv[]) {
/* The way MS Excel does it:
1.27815 1.27840 -> 1.27828
1.27813 1.27840 -> 1.27827
1.27819 1.27843 -> 1.27831
1.27999 1.28024 -> 1.28012
1.27839 1.27866 -> 1.27853
*/
cout << Round((1.27815 + 1.27840)/2, 5) << "\n"; // *
cout << Round((1.27813 + 1.27840)/2, 5) << "\n";
cout << Round((1.27819 + 1.27843)/2, 5) << "\n";
cout << Round((1.27999 + 1.28024)/2, 5) << "\n"; // *
cout << Round((1.27839 + 1.27866)/2, 5) << "\n"; // *
if(Round((1.27815 + 1.27840)/2, 5) == 1.27828) {
cout << "Hurray...\n";
}
system("PAUSE");
return EXIT_SUCCESS;
}
我在 stackoverflow 找到了这个函数,答案说它像内置的 excel 舍入例程一样工作,但事实并非如此。你能告诉我我错过了什么吗?
【问题讨论】:
-
你的条件是虚假的,你一般不能像那样天真地比较浮点值。
-
您真的需要这样的舍入值,还是只想打印格式化为给定小数位数的值?
-
我确实需要它进行进一步处理。