2015-11-01 5 views
-1

Когда я написал простую программу для чтения и печати числа с использованием float, я наткнулся на некоторые неожиданные результаты.Неверное значение Float

В следующей программе, когда я ввел номер 100.62, результат, который я получил, был 100.620003. Значение до восьми цифр указано правильно. Даже когда я пробовал разные номера, проблема сохранялась. Почему это? Есть ли способ преодолеть эту проблему, кроме как ограничивая десятичные точки.

А также есть способ распечатать цифру, как есть? то есть; если я вхожу в 100.62, он должен печатать 100.62, а если ввести 100.623, он должен распечатать 100.623 (не 100.620000 и 100.623000).

int main (void) 
{ 
    float i; 
    printf ("Enter a number : "); 
    scanf ("%f", &i); 
    printf ("You entered the number : %f", i) 
    return 0; 
} 
+2

Если вы хотите напечатать значительные цифры, попробуйте '% g'. Также: http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – szczurcio

+3

Так как значения с плавающей запятой работают на компьютерах. Объяснение можно найти здесь: [Является ли математика с плавающей запятой?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

ответ

1

Эта проблема возникает из-за того, как компьютеры обрабатывают значения поплавка.

Одним из способов преодоления этой проблемы является остановка с использованием float и обработка чисел в виде десятичных данных.

Чтобы напечатать цифру как есть, просто прочитайте ввод как строку и распечатайте ее. Этот метод очень прост и может поддерживать сложные входы, такие как 1e-10000 или 1.00000.

-1

Насколько я знаю, C всегда отображает эти полные цифры поплавка по умолчанию.

Если вы хотите отображать пользовательские десятичные точки, вы должны попробовать использовать «.x» перед обозначением f. X - общее число, которое вы хотите показать после точки. Например:

float i; 
printf ("Enter a number : "); 
scanf ("%f", &i); 
printf ("You entered the number : %.2f", i) 
return 0; 

это приведет к появлению 2 цифр после точки. Если вы введете 100.62, он будет отображаться как 100.62. Однако это статично. Я имею в виду, если вы введете 100.623, он покажет 100.62, а не 100.623. Вы должны точно знать, сколько цифр после точки, которую вы хотите показать.

+0

Это будет работать только для серверов с плавающей точкой, имеющих '2 'цифры после десятичного числа. Используйте «% g» spcifier для общего случая. – ameyCU

+0

Да, я сказал ранее, что вы должны использовать .x, чтобы указать, сколько чисел (x) вы хотите после точки. В любом случае, спасибо за вашу информацию. – Helen

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