2016-01-20 2 views
0

Как установить в TCL точность для плавающей запятой, выраженную в научном формате? Мне нужно установить максимальную ширину 8 символов.TCL/TK Как определить точность с плавающей запятой в научной нотации

set number 1.57766e-06 
puts $Output "[format "%-.7e" $number]" 

это не работает для меня, потому что я получаю:

1.5776600e-006 

, но я получил бы:

1.58e-06 

Я хочу только 2 цифры для экспоненциального члена.

+0

'regsub {0 (..) $} $ data {\ 1} data'? –

ответ

1

AFAIK нельзя указать количество цифр в экспоненте. Обойти это форматировать обе части по отдельности:

lassign [split $number e] mantissa exponent 
set number [format %.2f $mantissa]e[format %+03d $exponent] 

Эта команда может форматировать оба номера с и без экспоненты части:

(редактировать вместо тестирования и замены экспоненту, можно гарантировать, что есть экспонента часть)

proc fmtnum number { 
    lassign [split [format %.2e $number] e] mantissa exponent 
    return ${mantissa}e[format %+03d $exponent] 
} 

документация:. format, lassign, split

+0

это не работает для меня: - ожидаемое целое число, но получено «» - – zzari

+0

Оно работает только для чисел, имеющих экспоненциальную часть. Для чисел, которые этого не делают, вы получаете эту ошибку. Я отправлю исправление позже - это просто вопрос проверки экспоненты перед форматированием. –

0

format Команда не дает вам контроль над количеством экспоненты цифр, но я могу получить результат, который вы хотите в любом случае, используя другой формат:

% set number 1.57766e-06 
1.57766e-06 
% format %.2e $number 
1.58e-06 

я нахожу это может помочь экспериментировать в интерактивном при сборке сложных форматов.

+0

Я пробовал этот скрипт с «% .2e», и результат все тот же: 3 цифры для экспоненциальной части:/он уменьшает только десятичную часть. – zzari

Смежные вопросы