2013-03-03 3 views
1

작은 문제가 발생했습니다. C에서 여분의 소수 자릿수를 제거하려고합니다. 계산에 사용됩니다. 예를 67.98345 들어여분의 소수점 이하 자릿수를 C로 내림

, 나는 그냥의 printf 문에 대한 67.98

하지만하지 싶어요. 사실 67.98345

+0

"실제로 이중이되어야 67.98"문제가 있습니다. –

답변

0

이 라운드 가장 가까운 값으로하지 않습니다 67.98을로 이중이 필요합니다

double x_rounded = round(x*100)/100; 

는 완성도를 들어, 이러한 내림 또는 것까지 : MVP의 대답은 @

double x_rounded_down = floor(x*100)/100; 
double x_rounded_up = ceil (x*100)/100; 
+0

이 값이 정확하려면'#include '을 사용해야하고, x가 최대 배의 크기에 가깝다면 중간 결과의 오버플로를 얻을 수 있으므로 응답은 + -inf가됩니다. – Gene

+0

최대 이중 값이'1.7977e + 308' 인 것을 고려하면,'x> 1.7977e + 306' - 대부분의 사람들에게는 괜찮은 경우에만이 문제가 발생합니다 – mvp

2

알았어.하지만 사소한 문제가있어. x가 최대 배의 크기에 가까울 경우 곱셈의 중간 값이 double을 오버플로 할 수 있습니다. 이 문제를 해결할 수있는 대체 방법은 다음과 같습니다.

double intpart, fracpart; 

fracpart = modf(x, &intpart); 
x_rounded = intpart + round(fractpart * 100)/100; 
관련 문제