- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2010-07-20 11:58 编辑
C语言对浮点数的支持总是显得比较奇怪,与0比较的时候已经相当麻烦,没想到连简单的四舍五入也总是得不到应 ...
play123456 发表于 2005-02-03 13:57 ![]() - #include <math.h>
- double fround(double x,int flg,int dig);
- double fround(x,flg,dig)
- double x;
- int flg,dig;
- {
- double r,y,z;
- int i;
- if(!x) return x;
- z=x;
- if(dig > 0) {
- for(i=0;i<dig;i++) z *= 10;
- } else if(dig < 0) {
- for(i=0;i<dig;i++) z /= 10;
- } else ;
- r=modf(z,&y);
- switch(flg) {
- case 1: /* to - */
- if(r<0) y--;
- break;
- case 2: /* to + */
- if(r>0) y++;
- break;
- case 3: ; /* to 0 */
- break;
- case 4: /* to +- */
- if(z>=0) {
- if(r>0) y++;
- } else {
- if(r<0) y--;
- }
- break;
- case 5: /* 4s5r */
- default:
- if(z>=0) {
- if(r>=0.5) y++;
- } else {
- if(r<=-0.5) y--;
- }
- }
- if(dig > 0) {
- for(i=0;i<dig;i++) y /= 10;
- } else if(dig < 0) {
- for(i=0;i<dig;i++) y *= 10;
- } else ;
- return(y);
- }
复制代码 |
|