소수점 자리 n개로 부동 소수점 형식 지정
플로트를 "n"소수 위치로 포맷해야 해.
BigDecimal을 시도하고 있었지만, 반환 값이 정확하지 않다...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
내가 지정한 소수 자릿수로 부동값을 반환해야 한다.
필요합니다Float
값을 반환하지 않음Double
.
부동액 값을 전달하고 다음을 사용하십시오.
String.format("%.2f", floatValue);
DecimumFormat을 참조하십시오.쉽게 숫자를 취해서 소수 자릿수를 정해서 줄 수 있다.
편집: 예제
이것 좀 써봐. 나한테 많은 도움이 많이 되었어.
BigDecimal roundfinalPrice = new BigDecimal(5652.25622f).setScale(2,BigDecimal.ROUND_HALF_UP);
결과는 라운드 파이널 프라이스 -> 5652가 될 것이다.26
특히, 의 사용DecimalFormat
건설업자가 낙담하다이 클래스의 자바독에는 다음과 같이 명시되어 있다.
일반적으로 10진수 형식 생성자를 직접 호출하지 마십시오(숫자).포맷 공장 방법은 십진 포맷 이외의 하위 클래스를 반환할 수 있다.
https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
그래서 당신이 해야 할 일은 (예를 들어)
NumberFormat formatter = NumberFormat.getInstance(Locale.US);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
formatter.setRoundingMode(RoundingMode.HALF_UP);
Float formatedFloat = new Float(formatter.format(floatValue));
여기 를 이용한 간단한 샘플이 있다.DecimalFormat
닉이 언급한 수업
float f = 12.345f;
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));
인쇄 명세서의 출력은 12.35가 될 것이다.그것이 너를 위해 둥글게 할 것이라는 것을 주목해라.
아무도 그것을 하는 직접적인 방법을 지적하지 않은 것이 놀랍다. 충분히 쉬운 일이다.
double roundToDecimalPlaces(double value, int decimalPlaces)
{
double shift = Math.pow(10,decimalPlaces);
return Math.round(value*shift)/shift;
}
하지만 반올림 반올림은 안 된다.
중요한 것은, 반반올림 반올림은 이진법 기반 부동소수 값과 베이스-10 산수를 혼합할 때마다 혼란스럽고 예측할 수 없다는 것이다.나는 그것이 이루어질 수 없다고 거의 확신한다.기본적인 문제는 1.105와 같은 값을 부동소수로 정확하게 나타낼 수 없다는 것이다.부동 소수점 값은 1.105000000000001 또는 1.104999999999999와 같은 값이 될 것이다.그래서 반반올림을 시도하면 표현적 인코딩 오류가 발생하게 된다.
IEEE 부동소수점 구현은 반원형을 수행하지만, 소수점 반원형이 아닌 이진 반원형을 수행한다.그럼 넌 아마 괜찮을 거야
public static double roundToDouble(float d, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(d));
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
return bd.doubleValue();
}
이것은 훨씬 덜 전문적이고 훨씬 더 비싸지만 초보자들에게는 더 이해하기 쉽고 더 도움이 될 것이다.
public static float roundFloat(float F, int roundTo){
String num = "#########.";
for (int count = 0; count < roundTo; count++){
num += "0";
}
DecimalFormat df = new DecimalFormat(num);
df.setRoundingMode(RoundingMode.HALF_UP);
String S = df.format(F);
F = Float.parseFloat(S);
return F;
}
나는 이 질문에 대한 답을 찾고 있다가 나중에 방법을 개발했다! :) 공정한 경고, 그것은 가치를 반올림하고 있다.
private float limitDigits(float number) {
return Float.valueOf(String.format(Locale.getDefault(), "%.2f", number));
}
네가 원하는 건 그렇지 않은 것 같아.
return value.toString();
반환 값을 사용하여 표시하십시오.
value.floatValue();
주로 어떤 것을 계산하는 데 사용되기 때문에 항상 625.3을 반환할 것이다.
숫자를 문자열로 포맷하려면 다음과 같이 십진 형식을 사용하십시오.
String a = "123455";
System.out.println(new
DecimalFormat(".0").format(Float.valueOf(a)));
이 코드의 출력은 다음과 같다.
123455.0
원하는 출력에 따라 더 많은 0을 소수점 형식에 추가할 수 있다.
참조URL: https://stackoverflow.com/questions/5195837/format-float-to-n-decimal-places
'programing' 카테고리의 다른 글
Vuex 스토어 값을 입력하지 않고 업데이트 (0) | 2022.05.07 |
---|---|
타이페프의 용도는 무엇인가? (0) | 2022.05.07 |
V-모델이 입력에 대한 값 변경을 수신하지 않음(vuejs) (0) | 2022.05.06 |
비동기 jdbc 호출이 가능한가? (0) | 2022.05.06 |
Axios를 사용하여 객체를 JSon으로 게시 (0) | 2022.05.06 |