예를 들어 3.545555555 변수가 있는데 3.54로 자르고 싶습니다.
예를 들어 3.545555555 변수가 있는데 3.54로 자르고 싶습니다.
답변:
표시 목적으로 원하는 경우 다음을 사용하십시오 java.text.DecimalFormat
.
new DecimalFormat("#.##").format(dblVar);
계산에 필요한 경우 다음을 사용하십시오 java.lang.Math
.
Math.floor(value * 100) / 100;
floor
자르기를 사용 하는 것은 양수 값에 대해서만 작동합니다.
RoundingMode.DOWN
로 RoudingMode.FLOOR
부의 무한대에 가까워 항상 라운드.
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
사용 가능한 확인 RoundingMode
및 DecimalFormat
.
DOWN
실제로 양수와 음수 모두에 대해 잘림 효과가 있음을 알았습니다 . 문서의 예제 테이블에서 볼 수 있습니다.
Bit Old Forum, 위의 답변 중 어느 것도 양수와 음수 값 모두에 대해 작동하지 않았습니다 (나는 계산을 의미하고 반올림하지 않고 자르기를 의미합니다). 로부터 어떻게 자바에서 n 개의 소수 자릿수로 숫자를 반올림하는 링크
private static BigDecimal truncateDecimal(double x,int numberofDecimals)
{
if ( x > 0) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_FLOOR);
} else {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_CEILING);
}
}
이 방법은 나를 위해 잘 작동했습니다.
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
결과 :
0.00
9.62
9.62
9.62
9.62
9.99
-9.99
-9.00
어떤 이유로, 당신이 사용하지 않는 경우, BigDecimal
당신은 당신을 캐스팅 할 수 double
에은 int
을 절단합니다.
Ones 위치 로 자르려면 다음을 수행하십시오 .
int
받는 사람 소수점 첫째 자리의 장소 :
int
double
Hundreths 플레이스
예:
static double truncateTo( double unroundedNumber, int decimalPlaces ){
int truncatedNumberInt = (int)( unroundedNumber * Math.pow( 10, decimalPlaces ) );
double truncatedNumber = (double)( truncatedNumberInt / Math.pow( 10, decimalPlaces ) );
return truncatedNumber;
}
이 예에서, decimalPlaces
사람은 당신이 가고 싶은 이후 자리의 자릿수가 될 것이다, 그렇게 한 것 라운드에 에바의 장소, 2에 백분 등 (0으로 라운드에 사람의 장소, 그리고 수십 부정적 일 등)
unroundedNumber
충분히 큰 경우 사실상 난수가됩니다 . 질문의 예에서는 작동 할 수 있지만 일반적인 솔루션은 모든 double
.
문자열로 형식을 지정하고 다시 double로 변환하면 원하는 결과를 얻을 수 있습니다.
double 값은 round (), floor () 또는 ceil ()이 아닙니다.
이에 대한 빠른 수정은 다음과 같습니다.
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
표시 목적으로 sValue를 사용하거나 계산을 위해 newValue를 사용할 수 있습니다.
NumberFormat Class 객체를 사용하여 작업을 수행 할 수 있습니다.
// Creating number format object to set 2 places after decimal point
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setGroupingUsed(false);
System.out.println(nf.format(precision));// Assuming precision is a double type variable
아마도 다음과 같습니다.
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
빠른 확인은 Math.floor 메서드를 사용하는 것입니다. 아래 소수점 이하 두 자리에 대해 double을 확인하는 방법을 만들었습니다.
public boolean checkTwoDecimalPlaces(double valueToCheck) {
// Get two decimal value of input valueToCheck
double twoDecimalValue = Math.floor(valueToCheck * 100) / 100;
// Return true if the twoDecimalValue is the same as valueToCheck else return false
return twoDecimalValue == valueToCheck;
}
나는 Mani 의 약간 수정 된 버전이 있습니다.
private static BigDecimal truncateDecimal(final double x, final int numberofDecimals) {
return new BigDecimal(String.valueOf(x)).setScale(numberofDecimals, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args) {
System.out.println(truncateDecimal(0, 2));
System.out.println(truncateDecimal(9.62, 2));
System.out.println(truncateDecimal(9.621, 2));
System.out.println(truncateDecimal(9.629, 2));
System.out.println(truncateDecimal(9.625, 2));
System.out.println(truncateDecimal(9.999, 2));
System.out.println(truncateDecimal(3.545555555, 2));
System.out.println(truncateDecimal(9.0, 2));
System.out.println(truncateDecimal(-9.62, 2));
System.out.println(truncateDecimal(-9.621, 2));
System.out.println(truncateDecimal(-9.629, 2));
System.out.println(truncateDecimal(-9.625, 2));
System.out.println(truncateDecimal(-9.999, 2));
System.out.println(truncateDecimal(-9.0, 2));
System.out.println(truncateDecimal(-3.545555555, 2));
}
산출:
0.00
9.62
9.62
9.62
9.62
9.99
9.00
3.54
-9.62
-9.62
-9.62
-9.62
-9.99
-9.00
-3.54
이것은 나를 위해 일했습니다.
double input = 104.8695412 //For example
long roundedInt = Math.round(input * 100);
double result = (double) roundedInt/100;
//result == 104.87
개인적으로이 버전은 문자열 (또는 유사)로 변환 한 다음 형식을 지정하는 대신 숫자로 반올림을 수행하기 때문에 개인적으로 좋아합니다.
//if double_v is 3.545555555
String string_v= String.valueOf(double_v);
int pointer_pos = average.indexOf('.');//we find the position of '.'
string_v.substring(0, pointer_pos+2));// in this way we get the double with only 2 decimal in string form
double_v = Double.valueOf(string_v);//well this is the final result
글쎄, 이것은 약간 어색 할 수 있지만 문제를 해결할 수 있다고 생각합니다. :)