Java에서 소수점 이하 두 자리만 자르는 방법은 무엇입니까?
예를 들어 변수 3.54555555는 3.54로 잘라냅니다.
표시용으로 사용하는 경우는, 다음과 같이 합니다.
new DecimalFormat("#.##").format(dblVar);
계산에 필요한 경우 다음을 사용합니다.
Math.floor(value * 100) / 100;
DecimalFormat df = new DecimalFormat(fmt);
df.setRoundingMode(RoundingMode.DOWN);
s = df.format(d);
[ Available ]및 을 체크합니다.
다른 답변은 양수값과 음수값 모두에 해당되지 않았습니다(계산 및 반올림 없이 "트렁크"를 수행한다는 의미).스트링으로 변환하지 않습니다.
Java의 소수점 이하 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
먼저 주의해 주세요.double
는 이진수 분수로 소수 자릿수가 없습니다.
소수점 이하가 필요한 경우는,BigDecimal
(이것에는,setScale()
잘라내기 또는 사용하기 위한 방법DecimalFormat
을 얻다String
.
어떤 이유로든, 당신이 이 제품을 사용하고 싶지 않다면,BigDecimal
캐스트 할 수 있다double
에 대해서int
잘라낼 수 있습니다.
Ones 플레이스로 잘라내는 경우:
- 간단히 에 던지다.
int
10분의 1 자리:
- 10을 곱하다
- 에 던지다.
int
- 로 되돌아가다.
double
- 10으로 나눕니다.
훈드레스 장소
- 100 등으로 곱하고 나누다
예:
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
가고 싶은 곳을 지난 자리 수가 되므로 1은 10분의 1, 2는 100분의 1로 반올림됩니다(0은 1로 반올림, 마이너스 1은 10으로 반올림 등).
문자열로 포맷하고 더블로 변환하면 원하는 결과를 얻을 수 있을 것 같습니다.
이중값은 round(), floor() 또는 ceil()이 되지 않습니다.
이를 위한 빠른 해결 방법은 다음과 같습니다.
String sValue = (String) String.format("%.2f", oldValue);
Double newValue = Double.parseDouble(sValue);
sValue를 표시 목적으로 사용하거나 newValue를 계산에 사용할 수 있습니다.
번호를 사용할 수 있습니다.작업을 수행하기 위해 클래스 개체를 포맷합니다.
// 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
3.54555555가 3.54가 됩니다.이를 위해 다음을 시도해 보십시오.
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.FLOOR);
double result = new Double(df.format(3.545555555);
= 3.54!
아마도요.Math.floor(value * 100) / 100
? 다음과 같은 가치관에 주의해 주십시오.3.54
로는 정확하게 표현되지 않을 수 있다double
.
사용하는 방법은 다음과 같습니다.
double a=3.545555555; // just assigning your decimal to a variable
a=a*100; // this sets a to 354.555555
a=Math.floor(a); // this sets a to 354
a=a/100; // this sets a to 3.54 and thus removing all your 5's
이 작업은 다음과 같이 수행할 수도 있습니다.
a=Math.floor(a*100) / 100;
다음과 같은 경우가 있습니다.
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
간단한 체크는 Math.floor 방법을 사용하는 것입니다.아래 소수점 이하 2자리 이하를 더블 체크하는 방법을 만들었습니다.
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;
}
double value = 3.4555;
String value1 = String.format("% .3f", value) ;
String value2 = value1.substring(0, value1.length() - 1);
System.out.println(value2);
double doublevalue= Double.valueOf(value2);
System.out.println(doublevalue);
Math.floor() 메서드와 소수점 이하 기본 이동(100 = 2)을 사용했습니다.
//3.545555555 to 3.54 by floor method
double x = 3.545555555;
double y = Math.floor(x * 100); //354
double z = y / 100; //3.54
double firstValue = -3.1756d;
double value1 = ((int)(Math.pow(10,3)*firstValue)/Math.pow(10,3);
이 솔루션에서는 소수점 이하 두 자리까지만 두 자리 잘라냅니다.이 솔루션으로는 두 배의 값을 반올림할 수 없습니다.
double myDoubleNumber = 3.545555555;
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.DOWN);
double myDoubleNumberTruncated = Double.parseDouble(df.format(myDoubleNumber));
System.out.println(myDoubleNumberTruncated);
그러면 3.54가 출력됩니다.
Decimal Format ("#")##") - 여기에서는 소수점 뒤에 해시 기호(##)를 2개 입력합니다.따라서 소수점 이하 2자리까지 숫자가 잘립니다.
이것은 플러스 값과 마이너스 값 모두에 적용됩니다.
나는 마니의 버전을 약간 수정했다.
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
저는 개인적으로 이 버전이 마음에 들어요. 왜냐하면 이 버전은 String(또는 유사한)으로 변환한 후 포맷하는 것이 아니라 실제로 숫자로 반올림을 하기 때문입니다.
언급URL : https://stackoverflow.com/questions/7747469/how-can-i-truncate-a-double-to-only-two-decimal-places-in-java
'programing' 카테고리의 다른 글
Android - 시작 시 흰색 화면 방지 (0) | 2022.09.13 |
---|---|
어떻게 자바 스크립트 개체에 URL매개 변수 변환하는 데? (0) | 2022.09.13 |
python의 경우 오류 괄호 ''' 근처에 있는 MariaDB SQL 구문 (0) | 2022.09.13 |
일반 ES6 클래스 메서드에서 스태틱 메서드를 호출합니다. (0) | 2022.09.13 |
int의 크기는 컴파일러나 프로세서에 따라 달라집니까? (0) | 2022.09.13 |