2012-10-06 109 views

回答

5

這裏有一個簡單的方法:

printf("%.1f",trunc(x*10.0)/10.0); 
+0

用'%.1f'可能更安全。 –

+0

@DanielFischer:修改爲 –

2

這應該工作

double d = 4.48; 
d *= 10.; 
int i = d; 
d = (double) i/10.; 
11

可以(AB)使用的事實,整數除法截斷,並且不圓:

float original = 4.48; 

int tmp = original * 10; // 44.8 truncated to 44 

float truncated = tmp/10.0; // 4.4 
+0

爲了避免int轉換溢出,請使用'trunc *()'作爲回答[here](https://stackoverflow.com/a/12764022/2410359)。仍然可能有邊緣問題。 – chux

1
float myval = 4.48; 
float tr = ((int)(myval*10))/10.0; 
+0

固定答案...... – doron

2

如果你的編譯器支持C99,你應該能夠使用trunc()和朋友:

float f = 4.56f; 
f = truncf(f * 10.0)/10.0; 
+0

請注意,'10.0'在這裏是一個'double',所以'*'和'/'至少執行到'double' precision'。 – chux