BigDecimal дает несовместимое количество десятичных разрядов для фиксированного масштаба - PullRequest
0 голосов
/ 19 октября 2019

Я хочу получить ровно 100 цифр (включая цифру слева от десятичной точки) в разложении каждого иррационального квадратного корня из чисел меньше 100.

    int sum = 0;
    BigDecimal root;
    MathContext wtf = new MathContext(101, RoundingMode.HALF_UP);
    BigDecimal number = BigDecimal.ONE;

    for (int i = 1; i <= 100; i++) {

        if (Math.sqrt(i) != (int) Math.sqrt(i)) {
            System.out.println(i);
            root = number.sqrt(wtf);
            String digits = root.toString();
            StringBuffer copy = new StringBuffer(digits).deleteCharAt(1);
            System.out.println(copy);

            copy.deleteCharAt(copy.length() - 1);
            for (int j = 0; j < copy.length(); j++) {
                sum = sum + Character.getNumericValue(copy.charAt(j));
            }
            System.out.println("sum: " + sum + "; length: " + copy.length());

        }
        number = number.add(BigDecimal.ONE);

    }

Что я не могу понять, так этопочему для большинства номеров я получаю 100 цифр, как я хочу, но для некоторых чисел, таких как 5 и 27, я получаю всего 99 цифр.

...