У меня та же проблема, и еще:
[debug] ?- format( '~3f', 34.34219089).
34,342
Запятая (хотя это требуется для локали, следите за этим) усложняет чтение выходных данных. Я получил некрасивый обходной путь для контроля округления:
[debug] ?- X is round(34.34219089 * 1000) / 1000, write(X).
34.342
X = 34.342.
Для дополнения и выравнивания вы должны использовать табуляцию, управляемую парами t
и |
. Документация на эту тему слишком сложна. Например, чтобы напечатать таблицу чисел в стиле таблицы по умолчанию (выравнивание по левому краю, выравнивание по правому краю):
test(indent) :- nl,
forall(member(L, [[a, 3.66, 55.5334],
[basd, 22.876345, 2113.4465],
[cas, 0.6623233, 53.5]
]),
format('~s~t~20|~t~3f~40|~t~3f~60|~n', L)).
Обратите внимание на позицию спецификатора 'space allocator' ~ t , абсолютная ширина столбца ~ | , относительно спецификатора типа поля. Выход:
?- run_tests(sheet_inventory:indent).
% PL-Unit: sheet_inventory:indent
a 3,660 55,533
basd 22,876 2113,447
cas 0,662 53,500