2009-10-27 14 views
14

Mam podwójne:Jak zaokrąglić w dół podwójną do najbliższej mniejszej int w C?

double d = 25.342; 

Jak mogę przekonwertować go do 25 wartości?

Jeśli to był -12.46, chciałbym uzyskać -13.

+0

chciałbym wynik być typu int –

+2

Dla przypomnienia to, o co prosisz, to zaokrąglanie, a nie rzutowanie. –

+4

@Jon Nie, to nie jest "zaokrąglanie". Zaokrąglanie przekształca liczbę w "najbliższą" liczbę całkowitą. – AraK

Odpowiedz

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

Chciałbym, aby wynik był typu int int –

+0

Problemy zaczynają się, gdy argumentem dla podłogi jest> INT_MAX lub dirkgently

+5

W takim przypadku nie można uzyskać całkowitej wersji piętra wartości, więc nie ma to znaczenia. – jprete

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

Uwaga ta przekształci 12.99999 do 12.

Ref:

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

+0

Wycofany dla odnośnika, ale nie potrzebujesz rzutu do int tam, piętro już wraca jako int? – Lee

+4

'floor()' zwraca double (§7.12.9.2 w standardzie C –

+0

Siadam poprawiony! Dzięki:] – Lee

0

Gdzie x to 25,342

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

+0

@Mike Nie sądzę, że chce zaokrąglić liczby.Spójrz na przykład liczby ujemnej :) – AraK

+0

Zrobiłem, jego post powiedział: "(Gdyby było -12.46 Chciałbym uzyskać -13) "Tak więc zakładałem małe zaokrąglenie. – Mike

+0

To zaokrąglanie do dolnej lub, w zasadzie, piętra(). –

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; 
} 

Można też spojrzeć na stdint.h

+0

Przerywa wykonywanie wielu wartości, takich jak '25.9', ponieważ nie" zaokrągla podwójnie do najbliższej mniejszej int ". – chux

Powiązane problemy