클래스 BigDecimal
에는 무손실 변환을 보장하는 몇 가지 유용한 방법이 있습니다.
byteValueExact()
shortValueExact()
intValueExact()
longValueExact()
그러나 방법 floatValueExact()
과 doubleValueExact()
존재하지 않습니다.
메소드 floatValue()
및에 대한 OpenJDK 소스 코드를 읽었습니다 doubleValue()
. 둘 다 Float.parseFloat()
및 으로 폴백되는 것처럼 보이며 Double.parseDouble()
양 또는 음의 무한대를 반환 할 수 있습니다. 예를 들어 10,000 9s의 문자열을 구문 분석하면 양의 무한대가 반환됩니다. 내가 이해하는 것처럼, BigDecimal
무한의 내부 개념이 없습니다. 또한, 100 9s의 문자열을 double
제공 1.0E100
하는 대로 파싱하면 무한대가 아니지만 정밀도가 떨어집니다.
합리적인 구현 무엇 floatValueExact()
과 doubleValueExact()
?
나는 생각 double
결합하여 솔루션 BigDecimal.doubleValue()
, BigDecial.toString()
, Double.parseDouble(String)
와 Double.toString(double)
,하지만 지저분한 보인다. 더 간단한 해결책이있을 수 있기 때문에 여기에 묻고 싶습니다.
분명히하기 위해 고성능 솔루션이 필요하지 않습니다.