近日,發現小數四捨五入寫代碼有問題,遂網絡上查了下資料,記錄下來以便日後查詢。
原理:放大數據,再利用運算符的優先級處理。
1.首先,得知道,運算優先級,括號→轉換→乘除加減。
#include <stdio.h> long powe(long n); int main(void) { long t; //過渡量 long i = 3; //精度,小數點後幾位。 float h = 11.5555; //需要進行四捨五入的數 t = (long)((h*powe(i+1)+5)/10.0); h = (float)t/powe(i); printf("%f",h); return 0; } long powe(long n) //平方 { long x=1; if(n>0) x = 10*powe(--n); else return 1; return x; }
㈡加法實現:
#include <stdio.h> double powe(double n); int main(void) { double x = 11.55556666; //需四捨五入的數 double i = 3; //精度 double y = 0; //結果 y = 0.01*1.0/powe(i)*(int)(100.0*powe(i)*(x+0.005*1.0/powe(i)));//默認小數點後一位 printf("%f",y); return 0; } double powe(double n) { --n; double s = 0; if(--n>0) s = 10*powe(--n); else return 1; return s; }
總結:
以上兩種方式都是針對小數點後幾位進行四捨五入,第一種方式優點在於負數也能進行,第二種則不能。但需注意的是,在第一種方式中隱形轉換對其影響大,個人推薦使用第二種方式。