2015-03-13 5 views
0

Я использую цикл while для подсчета количества цифр на моем входе.Подсчет числа цифр в двойном C++

Так что мой вклад был 1,525

length = 0; 
num = num - int(num); 
while (num >= .0001) { 
    num = num * 10; 
    length = length + 1; 
    num = num - int(num); } 

Когда я сделать

cout << "\n\nLength: " << length << "\n"; 

Ответ Я получаю 51 и другие цифры дают мне asnwear из 49 или что-то явно не так. Это то, как работает C++, или это просто моя ошибка. Спасибо.

+1

Вы можете видеть, что происходит, отображая значения по мере запуска вашего алгоритма: http://ideone.com/ORPWpx - имейте в виду уже предоставленную исходную информацию, что 'double's не может точно хранить 1.525. –

ответ

2

double и float не всегда могут точно хранить значения, которые вы пытаетесь сохранить в них, это не то, как они работают. Во многих случаях они будут хранить приблизительное значение, которое обычно можно округлить до того, что вы хотели сохранить там, в первую очередь, но не совсем. Вот почему вы получаете эти результаты.

2

Вы можете использовать массив строк или символов, чтобы сохранить введенный номер. он может точно подсчитать длину. float double хранить приблизительное значение, вы можете ссылаться на here.

+0

Хорошее руководство, хотя стоит иметь в виду угловые случаи - при вводе «double» 1.525, 1.5250 и 0.1525E1 вполне может быть эквивалентно, но со строками немного неясно, каков должен быть ответ, а обработка для получения ответа может быть немного сложнее. –

0

Число с плавающей точкой не может хранить десятичную 1.525 точно, но если вы используете round вместо Int гипса и использовать fabs при сравнении с допуском для защиты от отрицательных чисел вы получите что-то вы можете быть довольны:

num -= round(num); 
while(fabs(num) >= .0001) { 
    num *= 10; 
    ++length; 
    num -= round(num); 
} 

Если вы с радостью согласны с тем, что 1.9999999 имеет такое же количество цифр, что и 2.0.

Как правило, поиск количества цифр в номере с плавающей запятой будет немного бессмысленным, поскольку он не хранится в виде десятичных цифр.

Смежные вопросы