달러에서 센트로 변환
On 2월 14, 2021 by admin라운드 함수를 사용하여 달러에서 센트로 이동하려고하는데 라운드 함수에 대해 뭔가 있다고 생각합니다. 실수로 잘못 이해했습니다. 왜냐하면 float에서 int로 100을 곱할 때 소수점을 얻지 못하기 때문입니다. 문제의 코드입니다.
#include <stdio.h> #include <cs50.h> #include <math.h> int main(void) { int owed = 0; printf("Enter the owed amount: "); do { owed = GetFloat(); } while (owed < 0); owed = owed * 100.0; float owe = roundf(owed); owe = (int)owe;
댓글
- i wasn ' 반올림하는 방법을 모르겠습니다. round ()를 사용했습니다. roundf ()가 아닙니다. 설명해주세요.
Answer
주요 문제는 초기 검색 값을 저장하는 방법입니다. GetFloat()
를 호출하고 결과를 int 유형의 변수 인 owed
에 저장합니다. GetFloat ()는 부동 소수점 숫자를 반환하며, 이는 owed에 저장하려고 할 때 암시 적으로 int로 캐스팅됩니다. 이 과정에서 소수점 부분이 잘립니다. 즉, 4.85를 하루 종일 저장하려고 할 수 있으며 항상 정수 4로 저장됩니다.
GetFloat ()에서 반환 된 값을 int가 아닌 float var에 저장해야합니다. 나중에 100을 곱하고 반올림 한 다음 그런 다음 int에 저장합니다.
부담으로 마지막 몇 줄은 작동합니다. , 매우 깨끗하지 않습니다. 다른 float가되어야하는 것을 수정하고 결과를 저장하기 위해 새로운 float를 만들고 다음 줄에서 float를 int로 캐스팅하고 int를 다시 float에 저장합니다. float를 반올림하고 동일한 float에 다시 저장하지만 다음 줄에서 float를 int로 캐스팅하고 새로운 int var에 저장합니다. 또는 한 줄로 모두 수행하는 것이 더 깔끔합니다. int change = roundf(dollars*100);
질문에 대한 답변이 있으면 확인 표시를 클릭하여 수락하십시오. 포럼 유지 관리를 계속 진행하겠습니다. 😉
댓글
- 어떻게 놓칠 수 있나요? 정말 고맙습니다. 내 코드는 3 시간 동안 round 함수를 수정 한 후 끔찍해 보였습니다. ' 이런 어리석은 실수를 할 수 있다고 믿을 수 없습니다.)
- 이건 내가 엄청 까다로울 수도 있지만 암시 적 캐스팅 을 멀리하고 항상 노골적 캐스팅을 사용해야합니다. 컴파일러는 물론 미래의 프로그래머가 실제로하려는 작업을 훨씬 더 명확하게합니다. 프로그래밍 초기에 들어가는 것은 매우 좋은 습관이 될 것입니다. 그것은 제 2의 성격이 될 것이고 많은 두통을 덜어 줄 것입니다 (그리고 훨씬 더 나은 코드를 만들 것입니다). int change = (int) (roundf (dollars * 100));
답글 남기기