Как я могу взять число с плавающей запятой только одну цифру после десятичной точки (0,1), используя scanf на языке C? Например, пользователь может набрать 3.25405 ... но в переменной будет сохраняться только 3.2. Как я могу это сделать ? Это отличается от округления числа с плавающей запятой.Одна цифра после десятичной точки во вводе
ответ
scanf("%3f",&float_var);
Когда «3» для трех символов 3.2 («3» + «» + „2“) Это, очевидно, если вы знаете, что вы будете иметь ряд с только одна цифра перед '.'
Приветствия,
Я не думаю, что вы можете сделать это за один проход, так как зсапЕ не имеет, как Printf делает, параметр «точность». Поэтому вместо этого я бы сделал:
int m, n;
float f;
scanf("%d.%1d", &m, &n);
if (m >= 0)
f=(float)m + ((float)n)/10;
else
f=(float)m - ((float)n)/10;
Надеюсь, это поможет.
Я установил начальное решение, основанное на commebts ниже
Я бы использовал double, а не float для результата, поскольку scanf делает ... – AntoineL
1) 'n' &' m' отменено? 2) Предложите 'long long' для части _whole_. 3) вместе взятые учитывают знак 'f = целое + (целое <0? -1: 1) * fraction/10.0.', как указано выше, когда' whole <0' 4) предлагают 'unsigned' фракцию. – chux
@chux да, m и n обратный - это опечатка. Я не понимал вопроса о знаке, хотя, спасибо, что указал на это. –
читать с помощью fgets()
и пост-процесс буфера. @DevSolar
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOF();
char *p = strchr(buf,'.');
if (p && isdigit(p[1])) p[2] = 0;
char *endptr;
double y = strtod(buf, &endptr);
...
Еще лучше, чтобы предупредить пользователя о игнорировали дополнительного входа.
if (p && isdigit(p[1])) {
if (p[2] && p[2] != '\n') puts("Extra input ignored.");
p[2] = 0;
}
char *endptr;
double y = strtod(buf, &endptr);
- 1. Ошибка Javascript: SyntaxError: по крайней мере одна цифра должна произойти после десятичной точки
- 2. Java регулярное выражение для не удалить, ни одна цифра chracter кроме десятичной точки
- 3. JsonCpp - Ноль после десятичной точки усечен
- 4. Число Ограничение после десятичной точки в javascript
- 5. PHP одна цифра после запятой для действительных чисел и без каких-либо цифр для целых значений
- 6. TextBox не корректно обновляется при вводе десятичной точки
- 7. Маскировка текстовое поле, чтобы принимать только 1 цифра после десятичной
- 8. Extjs: одна цифра движется вверх
- 9. столбца десятичной точки
- 10. print double с цифрами после десятичной точки
- 11. Остановить средние значения после второй десятичной точки
- 12. Java: указание количества чисел после десятичной точки
- 13. Как подсчитать количество цифр после десятичной точки
- 14. Значение усечения после десятичной точки в android
- 15. Указание количества чисел после десятичной точки
- 16. Задайте цифры в поплавке после десятичной точки
- 17. Количество нулей после десятичной точки в Java
- 18. Как усечь значение после десятичной точки
- 19. Java: как получить часть после десятичной точки?
- 20. Как обрезать нули после десятичной точки
- 21. изменение размера шрифта после десятичной точки
- 22. JS - Игнорировать числа после десятичной точки
- 23. Что происходит с цифрами после десятичной точки?
- 24. AngularJS - Невозможно удалить цифры после десятичной точки
- 25. Как добавить нули после десятичной точки
- 26. Нахождение количества мест после десятичной точки двойного
- 27. получить значение после десятичной точки в javascript
- 28. Проверить число после десятичной точки переменной флоат
- 29. потворствовать количество цифр после десятичной точки
- 30. как округлить числа после десятичной точки?
Попробуйте ввести '0,1' и увидеть результат в отладчике. Вы можете быть удивлены. – Olaf
Как правило, никогда не читайте пользовательский ввод через 'scanf()'. Эта функция просто не предоставляет достаточных возможностей для изящного извлечения из условий ошибки, таких как несоответствия формата и т. Д. Прочитайте всю строку ввода, затем проанализируйте ее в памяти (например, через 'strtod()'). – DevSolar
Возможно, вы не можете сделать это за один шаг: scanf (ни fscanf, ни любой другой вариант, ни основная функция strtod) не имеют никакого положения для частичной интерпретации десятичной части, оно будет пытаться сопоставить как можно больше цифр. – AntoineL