문제

내가 생각하는 꽤 기본적인 질문 - 나는이 기능을 수행하고 있습니다.

private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      return toFeet;
}

문제는 출력입니다. 예를 들어 101의 입력에서 337.36080000000004를 얻습니다. 부동 소수점을 자르기위한 적절한 관행은 무엇입니까?

아래의 답변이 가정했듯이, 나는 4 개의 중요한 수치가 내 전환율과 일치하기를 원합니다.

도움이 되었습니까?

해결책

당신은 a를 사용할 수 있습니다 숫자 사례.

NumberFormat nf = NumberFormat.getInstance(Locale.UK);
nf.setMinimumFractionDigits(4);
nf.setMaximumFractionDigits(4);
System.out.println(nf.format(feet));

또는 사용할 수 있습니다 십진법.

DecimalFormat df = new DecimalFormat("0.0000");
System.out.println(df.format(feet));

후자 (DecimalFormat)는 현지화 된 설정을 원하는 경우 형식과 전자 (NumberFormat)를 명시 적으로 명시하려고 할 때 사용됩니다.

4 개의 일관된 분수 수치의 경우, 실제로 장거리로 작업하지 않으면 Bigdecimal에서 드래그 할 필요가 없습니다.

다른 팁

나는 후손을 위해 내 자신의 질문에 대답하고 있습니다. 위의 소수성 답변을 사용했지만 답변은 메소드의 반환 유형을 고려하지 못했습니다.

완성 된 코드는 다음과 같습니다.

  private double convertMetersToFeet(double meters)
{
  //function converts Feet to Meters.
      double toFeet = meters;
      toFeet = meters*3.2808;  // official conversion rate of Meters to Feet
      String formattedNumber = new DecimalFormat("0.0000").format(toFeet); //return with 4 decimal places
      double d = Double.valueOf(formattedNumber.trim()).doubleValue();
      return d;
}

정확한 계산이 필요한 경우 사용하십시오 Bigdecimal 플로트 대신. 인쇄를 잘라 내고 싶다면 사용하십시오. 십진법.

DecimalFormat df = new DecimalFormat ("0.00");
System.out.println(df.format(convertMetersToFeet(101)));

사용 java.math.BigDecimal 십진 산술 용.

인쇄가 아닌 경우 오류에 신경 쓰지 않아야합니다. 337.36080000000004는 요인에 5 개의 유의 한 숫자 만 있고 테스트 입력에는 3 만 가지므로 337.3608만큼 정확합니다. (그리고 나는 당신의 방법이 준 대답이 331이 아니고 337이 아니기를 바랍니다.)

그러나이 라인은 다른 줄에서 가져 왔습니다 의문 트릭도하는 것 같습니다.

double toFeet = ((int)(meters*3.2808*10000))/10000.0;

유일한 문제는 오버플로 훨씬 더 빨리 넘치는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top