Scala BigDecimal подразделение - PullRequest
3 голосов
/ 27 августа 2009

Какая польза от оператора деления в скале BigDecimal?

val d1 = BigDecimal(2)
val d2 = BigDecimal(3)
val div = d1 / d2 //throws ArithmeticException: non-terminating decimal expansion

Чтобы заставить это работать, вам нужно определить контекст DECIMAL128 в десятичных числах. К сожалению, единственный способ сделать это:

val div = new BigDecimal(d1.bigDecimal.divide(d2.bigDecimal, MathContext.DECIMAL128)) //OK!

Но это просто беспорядок! Я что-то упустил?

1 Ответ

7 голосов
/ 27 августа 2009

Это известная ошибка в Scala -> см. Ticket # 1812 . Видимо, это исправлено в Scala 2.8. Вы также можете скачать исправление из отчета об ошибке, в котором реализован BigDecimal с прикрепленным к нему MathContext. Используя данные Decimal.scala, я могу написать что-то вроде этого и запустить без ошибок:

val d1 = Decimal128(1)
val d2 = Decimal128(3)
val d3 = d1 / d2 // works, gives a truncated result

Следовательно, вы можете скомпилировать указанный файл Decimal.scala и добавить его в classpath или дождаться Scala 2.8, который уже будет в стандартной библиотеке.

РЕДАКТИРОВАТЬ См. редакция 18021 стандартной библиотеки Scala для внесения изменений в BigDecimal, реализующих это.

Надеюсь, это поможет:)

-- Flaviu Cipcigan

...