Как использовать “%f” для заполнения двойного значения в строку с нужной точностью
-
09-06-2019 - |
Вопрос
Я пытаюсь заполнить строку двойным значением, используя sprintf
вот так:
sprintf(S, "%f", val);
Но точность сокращается до шести знаков после запятой.Для точности мне нужно около 10 знаков после запятой.
Как этого можно достичь?
Решение
%[ширина].[точность]
Ширина должна включать десятичную точку.
%8.2 означает ширину в 8 символов;5 цифр до точки и 2 после.Для точки зарезервирован один символ.
5 + 1 + 2 = 8
Другие советы
То, что вам нужно, - это модификатор:
sprintf(S, "%.10f", val);
man sprintf будет содержать гораздо больше подробностей о спецификаторах формата.
Для получения более полной справки смотрите Википедия printf статья, раздел "заполнители формата printf" и хороший пример на той же странице.
Будьте осторожны - выходные данные sprintf будут варьироваться в зависимости от языка C.Это может быть, а может и не быть тем, чего вы хотите.Смотрите LC_NUMERIC в документации по локали / справочных страницах.
%f
предназначен для значений с плавающей точкой.
Попробуйте использовать %lf
вместо этого.Он предназначен для парных прыжков (которые раньше назывались длинными поплавками).
двойное x = 3,14159265;
printf("15.10lf
", x);