2009-10-27 12 views
14

Tengo un doble:¿Cómo redondear un doble al int más pequeño más cercano en C?

double d = 25.342; 

¿Cómo puedo convertir a 25 valor?

Si fuera -12.46 me gustaría obtener -13.

+0

me gustaría que el resultado sea de tipo int –

+2

Para el registro, lo que está pidiendo es redondear, no emitir. –

+4

@Jon No, esto no está 'redondeando'. Redondear está transformando el número al entero "más cercano". – AraK

Respuesta

27
int i = (int)floor(25.342); 
+0

Me gustaría que el resultado sea del tipo int –

+0

Los problemas comienzan cuando el argumento para floor es> INT_MAX o dirkgently

+5

En ese caso, no se puede obtener una versión entera del piso del valor, por lo que realmente no importa. – jprete

15
int i = (int)floor(25.342); 

Nota Esto convertirá a 12,99999 12.

Ref:

http://www.codecogs.com/reference/c/math.h/floor.php

+0

Enlace de referencia para el enlace de referencia, pero no necesita el molde para el int, el piso ya lo devuelve como un int? – Lee

+4

'floor()' devuelve un doble (§7.12.9.2 en el estándar C) –

+0

Me siento corregido! Gracias:] – Lee

0

donde x es la int 25,342

i = x> = 0? (Int) (x + 0.5): (int) (x-0,5)

+0

@Mike No creo que quiera redondear números. Mira el número negativo ejemplo :) – AraK

+0

Lo hice, su mensaje decía "(Si fuera -12.46 me gustaría para obtener -13) "Asumí un pequeño redondeo. – Mike

+0

Eso está redondeando para bajar, o, esencialmente, piso(). –

1
#include <math.h> 
#include <stdio.h> 

int main(){ 

    double d = 25.342; 
    double e = -12.99; 

    printf("%d\n",(int)round(d)); // 25 
    printf("%d\n",(int)round(e)); // -13 

    return 0; 
} 

También es posible que desee echar un vistazo a stdint.h

+0

Falla en muchos valores como '25.9' ya que no" redondea un doble al int más pequeño más cercano ". – chux

Cuestiones relacionadas