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
'programing' 카테고리의 다른 글
| 사전 개체를 web.config 파일에 저장하려면 어떻게 해야 합니까? (0) | 2023.07.10 |
|---|---|
| 테이블에 허용되는 최대 열 수는 몇 개입니까? (0) | 2023.07.10 |
| Spring Boot을 PostgreSQL에 자동으로 다시 연결하려면 어떻게 해야 합니까? (0) | 2023.07.10 |
| 내 SUM 선택 쿼리가 null을 반환합니다.0을 반환해야 합니다. (0) | 2023.07.10 |
| 여러 단계 항목에 대한 치명적인 오류 발생 (0) | 2023.07.10 |