Как вы можете получить количество цифр, содержащихся в двойном? - PullRequest
3 голосов
/ 16 сентября 2010

Я пытаюсь получить количество цифр в следующем двойном значении: 56.46855976, не используя преобразование его в строку (и просто заменяя «.» На «»).

У кого-нибудь есть идеи?

Ответы [ 3 ]

5 голосов
/ 16 сентября 2010

Подсчитайте, как часто вы должны делить число на 10, пока оно не станет меньше 1 ->, что дает вам цифры перед десятичной точкой.

Затем подсчитайте, как часто вы должны умножать исходное число на 10, пока оноравно Math.Floor-result ->, который дает вам цифры за десятичными точками.

Add.Будь рад.

Редактировать : Как указывает Джои, в этом есть некоторая неуверенность.Заранее определите максимальное количество цифр, чтобы не создавать бесконечный цикл.С другой стороны - «Как долго длится побережье Дании?» ...

1 голос
/ 31 мая 2017
    /// Returns how many digits there are to the left of the .
    public static int CountDigits(double num) {
        int digits = 0;
        while (num >= 1) {
            digits++;
            num /= 10;
        }
        return digits;
    }

Как говорил Мартин, считая справа от. бессмысленно.

Тесты:

MathPlus.CountDigits(56.46855976)                 -> 2
MathPlus.CountDigits((double)long.MaxValue + 1)   -> 19
MathPlus.CountDigits(double.MaxValue)             -> 309
0 голосов
/ 16 сентября 2010

Преобразование в строку может быть лучшим вариантом, который у вас есть. Помните, что double s представлены в базе 2 внутри. Следовательно, десятичное представление, которое вы видите, является лишь приближением к фактически сохраненному значению (за исключением целых чисел до 2 53 ), которое представляет собой сумму отдельных степеней 2.

Таким образом, попытка выяснить количество десятичных цифр из двоичного представления, безусловно, не является простой или тривиальной задачей - тем более что в структуре может также применяться округление, чтобы числа типа 3.999999999998 выглядели как 4.0, поскольку они, как представляется, имеют большую точность там на самом деле есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...