2012-10-06 63 views

Respuesta

5

Aquí está una manera simple:

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

Probablemente más seguro con '% .1f'. –

+0

@DanielFischer: modificado –

2

Esto debería funcionar

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

Puede (ab) usar el hecho de que trunca división entera y no redonda:

float original = 4.48; 

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

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

Para evitar el desbordamiento de conversiones 'int', use' trunc *() 'como se responde [aquí] (https://stackoverflow.com/a/12764022/2410359). Aún puede tener problemas de borde. – chux

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

respuesta fija ...... – doron

2

Si su compilador soporta C99, usted debería ser capaz de utilizar trunc() y amigos:

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

Note que '10.0' es un' doble' aquí y entonces '' 'y'/'se realizan al menos para' doble' precisión'. – chux