2012-06-21 5 views
0

부동 소수점 숫자를 반환하는 프로세스가 있습니다. 그런 다음 일부 숫자를 제거하기 위해 roundToDecimals 메서드를 사용합니다.roundToDecimals가 너무 많은 자릿수를 반환합니다.

roundToDecimals(weight,3) 

---- 갱신 2012년 6월 22일 : 오전 1시 42분 ----

public static double roundToDecimals(double d, int c) { 
int temp=(int)((d*Math.pow(10,c))); 
return (((double)temp)/Math.pow(10,c)); 
} 

--- 업데이트의 끝

그것은 이상 3 자리수 후 잘 작동하지만, 반환

소수점 마지막 자리가 제로 전

0.0020 
0.0060 
0.333 
0.071 

경우 누구든지 P의 이런 종류의 처리하는 방법을 알고 있나요 흠집?

+0

정확히 무엇이 문제입니까? 마지막으로 0이 아닌 숫자 뒤에 0이 나타나는 것을 좋아하지 않으십니까? 값을 인쇄하는 데 사용하는 코드를 포함하십시오. – cheeken

+0

문제가 해결되었습니다. 값은 인쇄되지 않지만 텍스트로 쓰면됩니다. 그러면 svmlight에서 읽습니다. koma 뒤에 세 자리 이상 발견되면 svmlight는 항상 오류를 반환합니다. 문제는 내가 내 Java 코드와 프로그램을 동시에 실행하는 것이었다. 내 Java 응용 프로그램을 중지 한 다음 svmlight를 실행하면 문제가 해결된다. –

답변

2

귀하의 0.333 사례를 고려하십시오. 이고 이진 부동 소수점 (double, float) 표현은 정확히 0.333입니다. 당신이

double d = 0.333; 

(난 당신이 내가 생각 당신 roundToDecimals 방법의 결과에 대해 불평하고 있으리라 믿고있어 사용 된 경우 당신이 얻을 것입니다 것입니다 "0.333에 가장 가까운 값이"단지 거기에있는 float 또는 double. 귀하의 질문에서 말씀하기가 어렵습니다.)

+0

두 배로 변수를 반환합니다. 정말 새로운 제안이 필요합니다. –

+1

@HermanPlaniGinting : 글쎄요. 시작하려면 부동 소수점 숫자에 대해 배워야 할 필요가 있습니다. –

0

귀하의 방법은 작동하지 않을 수 있습니다. 부동 소수점 값이 에 소수점 이하 자릿수가이 아니기 때문에 부동 소수점 값을 특정 소수 자릿수로 반올림 할 수 없습니다. 이진 장소가 있습니다. 소수 자릿수를 원하면 십진수로 변환해야합니다 (예 : DecimalFormat 또는 BigDecimal을 통해