Я пытаюсь получить число цифр в следующем двойном значении: 56.46855976, не используя преобразование его в строку (и просто заменяя «.» На «»).Как вы можете получить количество цифр, содержащихся в двойном?
У кого-нибудь есть идеи?
Я пытаюсь получить число цифр в следующем двойном значении: 56.46855976, не используя преобразование его в строку (и просто заменяя «.» На «»).Как вы можете получить количество цифр, содержащихся в двойном?
У кого-нибудь есть идеи?
Преобразование в строку может быть наилучшим вариантом. Помните, что double
s представлены в базе 2 внутри. Поэтому десятичное представление вы видите только приближение фактически хранимого значения (за исключением целых чисел до 2), который представляет собой сумму отдельных полномочий из 2.
Так, пытаясь выяснить количество десятичных цифр из двоичного представления, конечно, не является простой или тривиальной задачей, тем более что фреймворк также может применять округление, чтобы цифры, такие как 3.999999999998, выглядели как 4.0, поскольку они, похоже, имеют большую точность, чем есть на самом деле.
Подсчитайте, как часто вы должны делить число на 10, пока оно не станет меньше 1 ->, которое даст вам цифры до десятичной точки.
Затем подсчитайте, как часто вы должны умножать исходный номер на 10, пока он не станет равным Math.Floor-result ->, который даст вам цифры за десятичной точкой.
Добавить. Радоваться.
Редактировать: Как указывает Джоуи, в нем есть некорректность. Определите максимальное количество цифр заранее, чтобы не создавать бесконечный цикл. С другой стороны - «Как долго побережье Дании?» ...
/// 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
AWW Shucks, что не так с: 'Double D = 56.46855976; int length = d.ToString() Заменить (".", "") .Length; ' – slugster
Учитывайте также, что номер, который вы видите (56.46855976), является только * представлением * значения. Значение 1/3 очень короткое, число 0.33333 ... нет. Поэтому, за исключением проблем с просмотром, количество длин в строке не так много. –
Возможный дубликат [C# Десятичное значение для строки для валюты] (https://stackoverflow.com/questions/10437416/c-sharp-decimal-to-string-for-currency) – TylerH