Обработка чисел с начальными нулями в Tcl

Я испытываю затруднения при Tcl с помощью чисел с начальными нулями. Я анализирую некоторые числа, которые могут иметь начальные нули, такой как "0012", который должен быть интерпретирован как целое число "двенадцать".

$ tclsh
% set a 8 
8
% set b 08
08
% expr $a - 1
7
% expr $b - 1
expected integer but got "08" (looks like invalid octal number)

Что лучший способ состоит в том, чтобы обработать числа, которые могли бы иметь начальные нули в Tcl?

На ноте стороны, что составило бы допустимое восьмеричное число в Tcl, если "08" недопустимый?

6
задан Christopher Bruns 21 January 2010 в 16:25
поделиться

3 ответа

Вы захотите прочитать TCL и восьмеричные номера на TCL Wiki. Канонический способ - это обработка вашего ввода в виде строки и использовать команду Scan для извлечения чисел. Что приводит к этому, да многоуровневая, PREC:

proc forceInteger { x } {
    set count [scan $x %d%s n rest]
    if { $count <= 0 || ( $count == 2 && ![string is space $rest] ) } {
        return -code error "not an integer: \"$x\""
    }
    return $n
}
7
ответ дан 8 December 2019 в 17:21
поделиться

Эта ссылка должна помочь вам

Допустимые октальные числа могут содержать только цифры 0-7 и должны начинаться с 0

1
ответ дан 8 December 2019 в 17:21
поделиться

Лично я всегда использовал:

set $clean_number [regsub {^0*(.+)} $troublesome_number {\1}]

для демонстрации $ SPRUBLESOME_NUMPER S.

1
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: