자바를 0으로 반올림하는 법?자바에서 제로 방향으로 라운드
그래서 -1.9가 -1.0이되고 -0.2가 0.0이되고 3.4가 3.0이됩니다.
Math.round()
이 매개 변수를 변경할 수 있습니까?
자바를 0으로 반올림하는 법?자바에서 제로 방향으로 라운드
그래서 -1.9가 -1.0이되고 -0.2가 0.0이되고 3.4가 3.0이됩니다.
Math.round()
이 매개 변수를 변경할 수 있습니까?
나는 표준 라이브러리는 이러한 기능을 가지고 있다고 생각하지 않습니다.
문제는 다음
당신이 (즉, 양의 값을 내림, 음의 값을 반올림) 숫자가 0보다 크거나 작은 여부에 따라 (수학적으로 말하기) 매우 다른 행동을 요구하는 것입니다 방법이 사용될 수있다 :
public double myRound(double val) {
if (val < 0) {
return Math.ceil(val);
}
return Math.floor(val);
}
+1 : 지금까지 옳은 일을 수행하는 유일한 대답 (AFAICS). –
언제나 절사를 원하는 것처럼 보입니까? 당신은 Math.floor
대신
public static double floor(double a)
가 이 인수의 값 이하로, 계산 정수로 동일한 것을 가장 큰 (양의 무한대에 가장 가깝다) double 값을 반환 할 수 있습니다. 특별한 경우 :
'Math.floor()'는 -ve 무한대를 0으로 반올림합니다. –
그냥 int로 캐스팅하면됩니다.
편집 : 당신은 두 배를 유지하려면이 단순히 충분히 작동합니다 :
if (val < 0)
return -Math.floor(-val);
else
return Math.floor(val);
그리고 조금 더 영리없는 코드를 분기과 느낌을 원하는 사람들을 위해 :
long tmp = Double.doubleToLongBits(val);
tmp >>>= 63;
return Math.floor(val) + tmp;
을 BigDecimal
은 많은 rounding options을 제공합니다. 이 같은 길이로
특히, 그것은 OPO의 요구를 해결하기 위해 DOWN을 사용합니다. 이것은 FLOOR가 올바른 수학적 동작을 따르는 점에서 FLOOR와는 다릅니다. – demongolem
RoundingMode.DOWN
을 사용하면 0으로 향하게됩니다.
예 :
BigDecimal value = new BigDecimal("1.4");
value = value.setScale(0, RoundingMode.DOWN);
System.out.println(value.doubleValue());
BigDecimal value1 = new BigDecimal("-1.4");
value1 = value1.setScale(0, RoundingMode.DOWN);
System.out.println(value1.doubleValue());
당신이 시도 할 수 있습니다 :
public static void main(String[] args) {
Double myDouble = -3.2;
System.out.println(myDouble.intValue()); //Prints -3
}
y=sign(x)*floor(abs(x))
또는
y=sign(x)*round(abs(x)-0.5)
는 자바로 구현하기 쉬워야한다.
'x-x % 1' (Java 만 해당) – Museful