programing

C 부동 소수점을 int로 변환

mailnote 2023. 7. 10. 22:37
반응형

C 부동 소수점을 int로 변환

저는 C(C++가 아닌)를 사용하고 있습니다.

플로트 번호를 다음과 같이 변환해야 합니다.int가장 가까운 숫자로 반올림하는 것이 아니라 정수 부분 뒤에 있는 것을 제거하고 싶습니다.비슷한 것

4.9 -> 4
  .9
  -> 4
my_var = (int)my_var;

그것처럼 간단해.기본적으로 변수가 int이면 필요하지 않습니다.

C에서 사용

int C = var_in_float;

그들은 암시적으로 변환할 것입니다.

더 낮게 반올림하고 싶으면 그냥 드리세요.

float my_float = 42.8f;
int my_int;
my_int = (int)my_float;          // => my_int=42

다른 목적으로, 가장 가까운 값으로 반올림하려면 다음과 같은 작은 함수나 정의를 만들 수 있습니다.

#define FLOAT_TO_INT(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5))

float my_float = 42.8f;
int my_int;
my_int = FLOAT_TO_INT(my_float); // => my_int=43

주조하기 전에 INT_MIN과 INT_MAX 사이에 플로트가 있는지 확인하는 것이 이상적입니다.

double a = 100.3;
printf("%f %d\n", a, (int)(a* 10.0));

Output Cygwin 100.3 1003
Output MinGW: 100.3 1002

(int)를 사용하여 이중을 int로 변환하는 것은 페일 세이프가 아닌 것 같습니다.

이에 대한 자세한 내용은 여기에서 확인할 수 있습니다. 이중을 int로 변환하시겠습니까?

좋은 손님이시군요! -- 제가 아직 제 경우에 만족할 만한 답을 찾지 못한 경우, 제가 여기서 제공하는 답은 저에게 효과가 있지만, 미래의 증거는 아닐 수도 있습니다.

gcc(clang?)를 사용하고 있는 경우,-Werror그리고 -Wbad-function-cast정의됨,

int val = (int)pow(10,9);

결과:

error: cast from function call of type 'double' to non-matching type 'int' [-Werror=bad-function-cast]

(정당한 이유로 오버플로가 발생하고 값이 반올림된 위치를 고려해야 합니다.)

편집: 2020-08-30: 그래서, 함수에서 int로 반환되는 값을 캐스팅하는 제 사용 사례는 어디선가 개인 함수 대신 pow()를 선택했습니다.그리고 나서 저는 pow()를 더 생각하는 것을 피했습니다. (아래에 사용된 pow()가 문제가 될 수 있는 이유에 대한 자세한 설명을 참조하십시오...)

(pow()에 대한 매개변수가 양호하다는 것을) 적절히 고려한 후,int val = pow(10,9);gcc 9.2 x86-64에서 작동하는 것 같습니다...

그러나 참고:

printf("%d\n", pow(10,4));

예를 들어 출력할 수 있습니다.

-1121380856

어디서

int i = pow(10,4); printf("%d\n", i);

인쇄된

10000

내가 시도한 특정한 경우에.

언급URL : https://stackoverflow.com/questions/24723180/c-convert-floating-point-to-int

반응형