cpp

Преобразование строки в число

Для преобразования строки в число используются следующие функции из пакета fmt:

  • Sscan() — функция принимает строку и один или несколько параметров через запятую. В качестве значения нужно передать адрес переменной, в которую будет записано прочитанное значение. Чтобы передать адрес следует перед названием переменной добавить символ &. Функция возвращает два значения. Первое значение содержит количество успешных записей. Через второе значение можно получить сообщение об ошибке. Если ошибка не возникла, то значением будет nil. Формат функции:
fmt.Sscan(str string, a ...interface{}) (n int, err error)

Пример преобразования строки в число:

var x int = 0
n, err := fmt.Sscan("10", &x)
fmt.Println(n, err) // 1 <nil>
fmt.Println(x)      // 10
n, err = fmt.Sscan("30 40", &x)
fmt.Println(n, err) // 1 <nil>
fmt.Println(x)      // 30
n, err = fmt.Sscan("строка", &x)
fmt.Println(n, err) // 0 expected integer
  • Sscanln() — функция принимает строку и один или несколько параметров через запятую. В качестве значения нужно передать адрес переменной, в которую будет записано прочитанное значение. Чтобы передать адрес следует перед названием переменной добавить символ &. Функция возвращает два значения. Первое значение содержит количество успешных записей. Через второе значение можно получить сообщение об ошибке. Если ошибка не возникла, то значением будет nil. В отличие от функции Sscan() функция Sscanln() после последнего значения ожидает символ перевода строки или конец строки. Если это не так, то через второе возвращаемое значение будет доступно сообщение об ошибке. При этом количество успешных записей может быть не равно 0. Формат функции:
fmt.Sscanln(str string, a ...interface{}) (n int, err error)

Пример преобразования строки в число:

var x int = 0
n, err := fmt.Sscanln("10", &x)
fmt.Println(n, err) // 1 <nil>
fmt.Println(x)      // 10
n, err = fmt.Sscanln("30 40", &x)
fmt.Println(n, err) // 1 expected newline
n, err = fmt.Sscanln("строка", &x)
fmt.Println(n, err) // 0 expected integer
  • Sscanf() — функция принимает исходную строку, строку формата и один или несколько параметров через запятую. В качестве значения нужно передать адрес переменной, в которую будет записано прочитанное значение. Чтобы передать адрес следует перед названием переменной добавить символ &. Внутри строки формата можно указать обычные символы и спецификаторы формата, начинающиеся с символа % (см. описание функции Printf() в разд. 1.9). Количество спецификаторов должно совпадать с количеством переданных параметров. Функция возвращает два значения. Первое значение содержит количество успешных записей. Через второе значение можно получить сообщение об ошибке. Если ошибка не возникла, то значением будет nil. Формат функции:
fmt.Sscanf(str string, format string,
           a ...interface{}) (n int, err error)

Пример преобразования строки в число:

var x int = 0
n, err := fmt.Sscanf("10", "%d", &x)
fmt.Println(n, err) // 1 <nil>
fmt.Println(x)      // 10
n, err = fmt.Sscanf("30 40", "%d", &x)
fmt.Println(n, err) // 1 <nil>
fmt.Println(x)      // 30
n, err = fmt.Sscanf("строка", "%d", &x)
fmt.Println(n, err) // 0 expected integer

Для преобразования строки в число можно воспользоваться следующими функциями из пакета strconv:

  • Atoi() — преобразует строку в целое число типа int. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Формат функции:
strconv.Atoi(s string) (int, error)

Пример:

// import "strconv"
n, err := strconv.Atoi("10")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(n) // 10
fmt.Println(strconv.Atoi("18446744073709551615"))
// 9223372036854775807 strconv.Atoi: parsing
// "18446744073709551615": value out of range
fmt.Println(strconv.Atoi("0b01110111"))
// 0 strconv.Atoi: parsing "0b01110111": invalid syntax
fmt.Println(strconv.Atoi("0167"))
// 167 <nil>
fmt.Println(strconv.Atoi("0o167"))
// 0 strconv.Atoi: parsing "0o167": invalid syntax
fmt.Println(strconv.Atoi("0xFF"))
// 0 strconv.Atoi: parsing "0xFF": invalid syntax
fmt.Println(strconv.Atoi("str"))
// 0 strconv.Atoi: parsing "str": invalid syntax
  • ParseInt() — преобразует строку в целое число со знаком. Формат функции:
strconv.ParseInt(s string, base int,
                 bitSize int) (i int64, err error)

В первом параметре указывается строка, содержащая целое число. Во втором параметре передается система счисления (число от 2 до 36). Если указано число 0, то система счисления определяется автоматически по префиксам. Третий параметр задает размер в битах (0 (int), 8 (int8), 16 (int16), 32 (int32) или 64 (int64)). Функция возвращает два значения. Через первое значение доступно число типа int64. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Пример:

n, err := strconv.ParseInt("10", 10, 0)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(n) // 10
fmt.Println(strconv.ParseInt("-10", 10, 0)) // -10 <nil>
fmt.Println(strconv.ParseInt("+10", 10, 0)) // 10 <nil>
fmt.Println(strconv.ParseInt("18446744073709551615", 10, 0))
// 9223372036854775807 strconv.ParseInt:
// parsing "18446744073709551615": value out of range
fmt.Println(strconv.ParseInt("0b01110111", 0, 0))
// 119 <nil>
fmt.Println(strconv.ParseInt("01110111", 2, 0))
// 119 <nil>
fmt.Println(strconv.ParseInt("0b01110111", 2, 0))
// 0 strconv.ParseInt: parsing "0b01110111": invalid syntax
fmt.Println(strconv.ParseInt("0167", 8, 0))
// 119 <nil>
fmt.Println(strconv.ParseInt("0o167", 0, 0))
// 119 <nil>
fmt.Println(strconv.ParseInt("167", 8, 0))
// 119 <nil>
fmt.Println(strconv.ParseInt("0o167", 8, 0))
// 0 strconv.ParseInt: parsing "0o167": invalid syntax
fmt.Println(strconv.ParseInt("0xFF", 0, 0))
// 255 <nil>
fmt.Println(strconv.ParseInt("FF", 16, 0))
// 255 <nil>
fmt.Println(strconv.ParseInt("0xFF", 16, 0))
// 0 strconv.ParseInt: parsing "0xFF": invalid syntax
fmt.Println(strconv.ParseInt("str", 10, 0))
// 0 strconv.ParseInt: parsing "str": invalid syntax
  • ParseUint() — преобразует строку в целое число без знака. Формат функции:
strconv.ParseUint(s string, base int,
                  bitSize int) (uint64, error)

В первом параметре указывается строка, содержащая целое число. Знак числа является недопустимым символом. Во втором параметре передается система счисления (число от 2 до 36). Если указано число 0, то система счисления определяется автоматически по префиксам. Третий параметр задает размер в битах (0 (uint), 8 (uint8), 16 (uint16), 32 (uint32) или 64 (uint64)). Функция возвращает два значения. Через первое значение доступно число типа uint64. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Пример:

n, err := strconv.ParseUint("10", 10, 0)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(n) // 10
fmt.Println(strconv.ParseUint("-10", 10, 0))
// 0 strconv.ParseUint: parsing "-10": invalid syntax
fmt.Println(strconv.ParseUint("18446744073709551616", 10, 0))
// 18446744073709551615 strconv.ParseUint:
// parsing "18446744073709551616": value out of range
fmt.Println(strconv.ParseUint("0b01110111", 0, 0))
// 119 <nil>
fmt.Println(strconv.ParseUint("01110111", 2, 0))
// 119 <nil>
fmt.Println(strconv.ParseUint("0b01110111", 2, 0))
// 0 strconv.ParseUint: parsing "0b01110111": invalid syntax
fmt.Println(strconv.ParseUint("0167", 8, 0))
// 119 <nil>
fmt.Println(strconv.ParseUint("0o167", 0, 0))
// 119 <nil>
fmt.Println(strconv.ParseUint("167", 8, 0))
// 119 <nil>
fmt.Println(strconv.ParseUint("0o167", 8, 0))
// 0 strconv.ParseUint: parsing "0o167": invalid syntax
fmt.Println(strconv.ParseUint("0xFF", 0, 0))
// 255 <nil>
fmt.Println(strconv.ParseUint("FF", 16, 0))
// 255 <nil>
fmt.Println(strconv.ParseUint("0xFF", 16, 0))
// 0 strconv.ParseUint: parsing "0xFF": invalid syntax
fmt.Println(strconv.ParseUint("str", 10, 0))
// 0 strconv.ParseUint: parsing "str": invalid syntax
  • ParseFloat() — преобразует строку в вещественное число. Формат функции:
strconv.ParseFloat(s string, bitSize int) (float64, error)

В первом параметре указывается строка, содержащая вещественное число. Во втором параметре передается размер в битах (32 (float32) или 64 (float64)). Функция возвращает два значения. Через первое значение доступно число типа float64. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Пример:

n, err := strconv.ParseFloat("10.5", 64)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(n) // 10.5
fmt.Println(strconv.ParseFloat("10,5", 64))
// 0 strconv.ParseFloat: parsing "10,5": invalid syntax
fmt.Println(strconv.ParseFloat("47.E-5", 64))
// 0.00047 <nil>
fmt.Println(strconv.ParseFloat("str", 64))
// 0 strconv.ParseFloat: parsing "str": invalid syntax
  • ParseComplex() — преобразует строку в комплексное число. Формат функции:
strconv.ParseComplex(s string, bitSize int) (complex128, error)

В первом параметре указывается строка, содержащая комплексное число. Во втором параметре передается размер в битах (64 (complex64) или 128 (complex128)). Функция возвращает два значения. Через первое значение доступно число типа complex128. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно. Пример:

n, err := strconv.ParseComplex("2+3i", 128)
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println(n) // (2+3i)
fmt.Println(strconv.ParseComplex("str", 128))
// (0+0i) strconv.ParseComplex: parsing "str": invalid syntax

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp