Проблема с большим десятичным числом - PullRequest
0 голосов
/ 11 июля 2019

Я устанавливаю масштаб и округляем десятичные числа для данных в json, используя Big Deciaml.

Пример данных внутри json:

{"dataMap":{"DATE":"20071.0","mean":"20225.08483315143","ByGroup":"Mean"}

Код для установки масштаба, округления и заменыисходное число с новым -

 //body - JSON body as String 
    //rndNumber - scale OR digits required after dedcimal
    private static String roundDecimalNumbers(def body, int rndNumber)
        {
            def ids = body =~ /[-+]?[0-9]*\.[0-9]+(?:[eE][-+]?[0-9]+)?/

            String number
            double dblNumber
            BigDecimal dec
            double newNumber
            (0..<ids.count).each
            {
                number = ids[it].toString()
                dec = new BigDecimal(String.valueOf(number)).setScale(rndNumber, BigDecimal.ROUND_FLOOR).stripTrailingZeros()
                body = body.toString().replace(number, dec.toString()) //replacing the orignial number with the scaled and rounded number 
            }
            return body.toString()
        }

Для некоторых случаев десятичных чисел я получаю исключение, как показано ниже, например, для приведенных выше примеров данных я получаю ошибку -

java.lang.AssertionError: data [rowNumber = 4] .dataMap.data [rowNumber = 97] .dataMap.mean Ожидаемое: 202258483315145 получено: 202258483315143

Другое похожее исключение - вызвано: java.lang.AssertionError: data[rowNumber = 2] .dataMap.data [rowNumber = 73] .dataMap.lower1 Ожидаемый: -354402976665825 получил: -354402976665821

В то же время большинство чисел масштабируются, округляются и заменяютсяштрафа в том же JSON, как -

{"dataMap":{"DATE":"19854","mean":"21778.4088","ByGroup":"Mean"},"rowNumber":66},{"dataMap":{"DATE":"19861","mean":"21547.0865","ByGroup":"Mean"},"rowNumber":67}

Я не могу понять, почему есть проблемы с некоторыми конкретными числами.Пожалуйста, помогите.

...