Когда вы создаете свой скаляр, вы копируете значение `my_x'
, а значение по-прежнему равно 92.23999999999999
, поскольку : display
не изменяет базовые данные, а только то, как они отображаются. Представьте, что данные в 5.00e+2
и 500
одинаковы, отличается только то, как отображается это значение.
Вам необходимо использовать строки для работы с отображением значения. Однако в вашем примере кода есть две проблемы со строками.
Хотя скаляры обычно могут содержать как строки, так и значения чисел c, возвращаемые скаляры не могут содержать строки (не спрашивайте мне почему). Можно ли вместо этого вернуть локальный?
В %-9.2f
вы указываете, что формат отображения должен быть длиной 9 символов, поэтому ваш скаляр будет e(my_x) : "92.24 "
. Вы можете настроить %-9.2f
, но так как вы сейчас работаете со строками, вы можете удалить лишние пробелы, используя функцию trim()
.
Попробуйте приведенный ниже код и посмотрите, работает ли он, учитывая контекст этой функции. Если нет, расскажите нам больше о том, что вы собираетесь делать.
#delimit;
capture program drop my_note;
program my_note, eclass;
local my_x: display %-9.2f 92.23999999999999;
ereturn local my_x = trim("`my_x'");
end;
ereturn clear;
my_note;
ereturn list;