Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C# Как посчитать количество цифр после запятой в double? Без конвертации в string/char

f f Ученик (64), закрыт 7 лет назад
Лучший ответ
Олег Олегович Просветленный (22928) 7 лет назад
//double d = 100;
double d = 100.123456789012;
int i = 0;
while (d * Math.Pow(10, 1 + i) % 10 != 0) { i++; }
Console.WriteLine("У числа {0} {1} знаков после запятой.", d, i--);
f fУченик (64) 7 лет назад
"У числа 1,569975 7 знаков после запятой."
Эх, близко, но не то. Там алгоритм сложнее...
f f Ученик (64) Можно, конечно, с округлением поиграть, но это тоже как-нибудь да сломает программу
Остальные ответы
Алекс Куха Высший разум (457145) 7 лет назад
Число значащих цифр для каждого типа известно заранее. (7/15)
f fУченик (64) 7 лет назад
Я имею ввиду следующее:
Пользователь ввел число 123,4985
Надо вывести 4 (потому что 4985)
Алекс Куха Высший разум (457145) не факт. Введённое число необязательно будет равно хранимому в памяти
Sergey Гуру (2689) 7 лет назад
число дабл содержит 52+1 бит в мантиссе. Это соответствует ~15 десятичным знакам.
Если число цифр после запятой это, число значимых знаков после запятой в виде ХХХХ. YYYY, то это 15 - log10(число).
Сергей Куксенков Просветленный (42015) 7 лет назад
double number = 129.12563;

int count = BitConverter.GetBytes(decimal.GetBits((decimal)number)[3])[2];

Console.WriteLine(count); // 5

Как это работает тут: matthewedmondson . info / 2014 / 03 / reliance-on-implementation-details . html
Похожие вопросы