После долгих поисков один из моих коллег нашел его:
f> str-rdp (rf + nr + nd + np - c-addr nr)
https://www.complang.tuwien.ac.at/forth/gforth/Docs-html-history/0.6.2/Formatted-numeric-output.html
Конвертировать rf в строку в c-addr nr.Правила преобразования и значения nr + nd np такие же, как и для f.rdp.
И из f.rdp
:
f.rdp (rf +nr + nd + np -)
https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Simple-numeric-output.html
Печать с плавающей запятой в формате rf.Общая ширина вывода равна nr.Для записи с фиксированной запятой число цифр после десятичной запятой равно + nd, а минимальное количество значащих цифр равно np.Точность установки не влияет на f.rdp.Обозначение с фиксированной запятой используется, если число знаковых цифр будет не менее np и если число цифр перед десятичной запятой будет соответствовать.Если нотация с фиксированной точкой не используется, используется экспоненциальная нотация, а если она не подходит, печатаются звездочки.Мы рекомендуем использовать nr> = 7, чтобы избежать риска того, что числа не будут соответствовать.Мы рекомендуем nr> = np + 5, чтобы избежать случаев, когда f.rdp переключается на экспоненциальную запись, потому что запись с фиксированной точкой будет иметь слишком мало значащих цифр, а экспоненциальная запись предлагает меньше значащих цифр.Мы рекомендуем nr> = nd + 2, если вы хотите иметь фиксированную запись для некоторых чисел.Мы рекомендуем np> nr, если вы хотите иметь экспоненциальную запись для всех чисел.
В понятных человеку терминах эти функции требуют числа в стеке float и трех чисел в стеке данных.
Первый числовой параметр сообщает ему как долго должна быть строка, второй сколько десятичных знаков вы хотели бы, а третий сообщает ему минимум количество десятичных знаков (что примерно соответствует точности).Большая часть неявной математики выполняется для определения окончательного формата String, который создается, поэтому для того, чтобы заставить его вести себя так, как вам нужно, почти требуется некоторая обработка.
Тестирование (мы не хотим перестраивать f.
, но для создания формата, который будет приниматься как число с плавающей запятой с четвертым до EVALUATE
его снова, так что запись 1.2345E0
специально предназначена):
PI 18 17 17 f>str-rdp type \ 3.14159265358979E0 ok
PI 18 17 17 f.rdp \ 3.14159265358979E0 ok
PI f. \ 3.14159265358979 ok