float 및 double 유형은 주로 과학 계산 및 공학 계산을 위해 설계되었으며 이진 부동 소수점 연산을 수행하고 광범위한 값에 대해 보다 정확한 대략적인 계산을 제공하도록 신중하게 설계되었습니다. 그러나 완전히 정확한 결과를 제공하지는 않으므로 정확한 결과가 필요한 경우에는 사용해서는 안 됩니다. 일반적으로 비즈니스 계산에서는 정확도 요구 사항이 높은 값을 계산하기 위해 BigDecimal이 필요한 경우가 많습니다. 예를 들어
0.07 + 0.020.58 - 0.421.005 * 10015.1 / 1000
어떤 환경에서도 코드를 이진 기계어 코드로 변환해야 기계가 이를 인식할 수 있습니다. 부동 소수점 숫자를 직접 출력할 경우 정확도가 높아집니다. 유지되며, 부동 소수점 수를 처리할 때 계산 후 정확도가 떨어질 수 있으며, 이 경우 BigDecimal을 사용하여 계산해야 합니다.
1. BigDecimal 만들기
BigDecimal에는 배정밀도 부동 소수점 숫자를 매개변수로 사용하는 생성자가 있습니다. 실제로 계산을 위해 부동 소수점 숫자가 전달되면 정밀도가 손실됩니다.
= BigDecimal(1.005= BigDecimal(100= BigDecimal("1.005"= BigDecimal("100"100.49999999999998934185896359849721193313598632812500 100.500
하지만 문자열을 전달하면 정확한 결과를 얻을 수 있고 BigDecimal.valueOf(double val)도 정확한 결과를 얻을 수 있습니다. 아래의 BigDecimal.valueOf(double val) 소스를 보시면 됩니다
public static BigDecimal valueOf(double val) {// Reminder: a zero double returns '0.0', so we cannot fastpath// to use the constant ZERO. This might be important enough to// justify a factory approach, a cache, or a few private// constants, later.return new BigDecimal(Double.toString(val)); }
이 메소드는 먼저 매개변수를 String 유형으로 변환한 후 매개변수가 String 유형인 구성 매개변수를 호출하므로 BigDecimal을 사용할 때 다음을 시도하십시오. 정확한 결과를 보장하려면 new BigDecimal(String val) 또는 BigDecimal.valueof(double val)를 사용하세요.
2.compareTo
CompareTo()를 사용하여 BigDecimal의 크기를 비교합니다.
0.05).compareTo(BigDecimal.valueOf(0.040.04).compareTo(BigDecimal.valueOf(0.040.03).compareTo(BigDecimal.valueOf(0.04BigDecimal.compareTo(BigDecimal val)BigDecimal이 val보다 크면 1을 반환하고, BigDecimal이 val보다 작으면 -1을 반환합니다. BigDecimal이 다음과 같을 때 회전합니다. 값 0 .
위 내용은 BigDecimal이란 무엇입니까? BigDecimal 인스턴스 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!