ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строк Π² числовыС значСния β€” ΠΎΠ΄Π½Π° ΠΈΠ· самых частых Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, парситС Π»ΠΈ Π²Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°, Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку Π² число. Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ здСсь слоТного? Но Π² 1Π‘ Π΅ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности, ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠ°ΠΌΠ½ΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии примСнСния.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° услоТняСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ строки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹, Π½ΠΎ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ (Ρ‚ΠΎΡ‡ΠΊΠΈ, запятыС), ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, символы Π²Π°Π»ΡŽΡ‚ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ тСкстовыС ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам выполнСния, искаТСнию Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ². Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС доступныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, сравним ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, рассмотрим Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки ΠΈ Π΄Π°Π΄ΠΈΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΎΠΉ способ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² зависимости ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ.

ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ функциям Число() ΠΈ Val(), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌ с использованиСм рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ распространённых ошибок ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π² строкС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ запятая вмСсто Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части) ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… массивов Π΄Π°Π½Π½Ρ‹Ρ….

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с 1Π‘ 8.3 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ вСрсиями, Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° различия Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Ρ€Π°Π·Π½Ρ‹Ρ… рСдакциях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Начнём с Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ постСпСнно ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌ.

1. Ѐункция Число(): Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ прСобразования

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ способ β€” функция Число(). Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ строку ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, автоматичСски учитывая Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ настройки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части).

Бинтаксис прост:

Число = Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹:

  • πŸ”’ Число("123") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ 123
  • πŸ’° Число("1 234,56") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ 1234.56 (Ссли Π² настройках систСмы Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ β€” запятая)
  • πŸ“‰ Число("-500") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ -500

Однако Ρƒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ограничСния:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если строка содСрТит нСдопустимыС символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΡƒΠΊΠ²Ρ‹ ΠΈΠ»ΠΈ Π·Π½Π°ΠΊΠΈ Π²Π°Π»ΡŽΡ‚Ρ‹), функция Число() Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ВсСгда провСряйтС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Число("100$");

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ("Ошибка прСобразования: " + ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

πŸ’‘

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку с символом Π²Π°Π»ΡŽΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "100$"), ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ всС Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() ΠΈΠ»ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

2. Ѐункция Val(): Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ

МСнСС извСстная, Π½ΠΎ полСзная функция β€” Val(). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Число(), ΠΎΠ½Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ всС Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы, ΠΊΡ€ΠΎΠΌΠ΅ Π·Π½Π°ΠΊΠ° минус, Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ обозначСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "1e3").

Бинтаксис:

Число = Val(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

  • πŸ”’ Val("123abc") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ 123 (символы послС Ρ†ΠΈΡ„Ρ€ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ)
  • πŸ’± Val("1 234,56") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ 1 (остановится Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΌ символС β€” ΠΏΡ€ΠΎΠ±Π΅Π»Π΅)
  • πŸ“Š Val("-500Ρ€") β†’ Π²Π΅Ρ€Π½Ρ‘Ρ‚ -500

Val() ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΊΠΎΠ³Π΄Π° строка содСрТит "мусорныС" символы, Π½ΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ располоТСны Π² Π½Π°Ρ‡Π°Π»Π΅. Однако ΠΎΠ½Π° Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ настройки, поэтому для строк с запятыми ΠΊΠ°ΠΊ раздСлитСлями Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части потрСбуСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Число() ΠΈ Val():

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉΠ§ΠΈΡΠ»ΠΎ()Val()
Π£Ρ‡Ρ‘Ρ‚ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… настроСкДаНСт
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²ΠžΡˆΠΈΠ±ΠΊΠ°Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ (частично)
ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΠ’Ρ‹ΡˆΠ΅ΠΠΈΠΆΠ΅
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ записиНСтДа
πŸ“Š Какой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ для прСобразования строк Π² числа?
Число()
Val()
РСгулярныС выраТСния
БобствСнная функция
НС знаю

3. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: запятыС vs Ρ‚ΠΎΡ‡ΠΊΠΈ

Одна ΠΈΠ· самых распространённых ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ β€” строки с числовыми значСниями, Π³Π΄Π΅ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части Π½Π΅ соотвСтствуСт настройкам систСмы. НапримСр, Π² 1Π‘ с русскими Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ настройками функция Число() ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°ΠΏΡΡ‚ΡƒΡŽ ("1,23"), Π° Π² строкС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ° ("1.23"), Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС.

РСшСния:

  1. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:
    Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ("1.23", ".", ",");
    

    Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Val() (Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ запятыС ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ).
  3. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сСанса для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:
    Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘Π΅Π°Π½ΡΠ°("DecimalSeparator", ".");

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ИзмСнСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° DecimalSeparator влияСт Π½Π° вСсь сСанс Ρ€Π°Π±ΠΎΡ‚Ρ‹ 1Π‘. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ остороТно Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… систСмах.

Для массовой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ ΠΈΠ· Excel) рСкомСндуСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ строки, приводя ΠΈΡ… ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ.

4. РСгулярныС выраТСния для слоТных случаСв

Когда строки ΠΈΠΌΠ΅ΡŽΡ‚ нСстандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, содСрТат тСкстовыС ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ, нСсколько чисСл ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы), Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят рСгулярныС выраТСния. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ числовыС значСния ΠΈΠ· любого контСкста.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ числа ΠΈΠ· строки Ρ‚ΠΈΠΏΠ° "Π‘ΡƒΠΌΠΌΠ°: 1 234,56 Ρ€ΡƒΠ±.":

Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("(\d[\d\s]*,\d{2})");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ° = Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.Π˜ΡΠΊΠ°Ρ‚ΡŒ("Π‘ΡƒΠΌΠΌΠ°: 1 234,56 Ρ€ΡƒΠ±.");

Если Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°.НайдСно() Π’ΠΎΠ³Π΄Π°

ЧисловаяБтрока = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ“Ρ€ΡƒΠΏΠΏΡƒ(1);

Число = Число(Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(ЧисловаяБтрока, " ", ""));

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  • 🎯 Π’ΠΎΡ‡Π½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ чисСл ΠΈΠ· слоТных строк.
  • πŸ”„ Гибкая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² (Π²Π°Π»ΡŽΡ‚Ρ‹, Π΄Π°Ρ‚Ρ‹ с числами ΠΈ Ρ‚.Π΄.).
  • πŸ“ˆ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

НСдостатки:

  • ⏳ Π‘ΠΎΠ»Π΅Π΅ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Число().
  • πŸ“š Π’Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания синтаксиса рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ рСгулярного выраТСния для извлСчСния ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл

РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "(-?\d[\d\s]*(?:[\.,]\d{2})?)" Π½Π°ΠΉΠ΄Ρ‘Ρ‚ числа Π²ΠΈΠ΄Π° -1 234,56 ΠΈΠ»ΠΈ 100.00, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ тысяч.

5. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° массивов строк: оптимизация ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ большоС количСство строк (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°), Π²Π°ΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Рассмотрим сравнСниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ массива ΠΈΠ· 10 000 строк.

ВСстовый ΠΊΠΎΠ΄:

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ = Новый Массив();

Для Π‘Ρ‡ = 1 По 10000 Π¦ΠΈΠΊΠ»

ΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΠΎΠΊ.Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ("123,45");

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² (врСмя выполнСния Π½Π° Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΌ сСрвСрС 1Π‘):

ΠœΠ΅Ρ‚ΠΎΠ΄Π’Ρ€Π΅ΠΌΡ (мс)ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
Число() Π² Ρ†ΠΈΠΊΠ»Π΅~120Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚
Val() Π² Ρ†ΠΈΠΊΠ»Π΅~180МСдлСннСС ΠΈΠ·-Π·Π° парсинга
Π Π΅Π³. Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ + Число()~450Π‘Π°ΠΌΡ‹ΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ
ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°ΠΌΠ΅Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ~90ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ для Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…

Для массовой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ нормализация строк (Π·Π°ΠΌΠ΅Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π»ΠΈΡˆΠ½ΠΈΡ… символов) с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ использованиСм Число() Π΄Π°Ρ‘Ρ‚ Π»ΡƒΡ‡ΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎ скорости.

β˜‘οΈ ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ прСобразования массива строк

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4

6. Π’ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ 1Π‘ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ошибками ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ строк Π² числа. Рассмотрим самыС распространённыС случаи ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Ошибка 1: ΠŸΡƒΡΡ‚Π°Ρ строка ΠΈΠ»ΠΈ NULL

Если ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Число() ΠΏΡƒΡΡ‚ΡƒΡŽ строку ΠΈΠ»ΠΈ NULL, Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. РСшСниС β€” ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°:

Если НС ΠŸΡƒΡΡ‚Π°ΡΠ‘Ρ‚Ρ€ΠΎΠΊΠ°(Π‘Ρ‚Ρ€ΠΎΠΊΠ°) Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = 0; // ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

Ошибка 2: НСсоотвСтствиС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ошибкам. НапримСр, строка "1.234" Π² систСмС с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ-запятой Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΊΠ°ΠΊ 1, Π° Π½Π΅ 1234.

Ошибка 3: ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

Если строка содСрТит число, выходящСС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° для Ρ‚ΠΈΠΏΠ° Число (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "1e300"), ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ошибка. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ Π§ΠΈΡΠ»ΠΎΠ‘Π΅Π·ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ провСряйтС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π°Ρ€Π°Π½Π΅Π΅.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с финансовыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ всСгда провСряйтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прСобразования Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ округлСния. НапримСр, Число("1,23456") Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… конфигурациях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ 1.23, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для бухгалтСрских расчётов.

7. ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ: собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

Для слоТных ΠΈΠ»ΠΈ часто ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ прСобразования, которая Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ спСцифику вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Ѐункция БтрокаВЧисло(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ”Ρ€ΠΎΠ±Π½ΠΎΠΉΠ§Π°ΡΡ‚ΠΈ = ",")

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°") Π’ΠΎΠ³Π΄Π°

// УдаляСм всС символы, ΠΊΡ€ΠΎΠΌΠ΅ Ρ†ΠΈΡ„Ρ€, Π·Π½Π°ΠΊΠ° минус ΠΈ раздСлитСля

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, " ", "");

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒΠ”Ρ€ΠΎΠ±Π½ΠΎΠΉΠ§Π°ΡΡ‚ΠΈ, ".");

// УдаляСм всС Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы, ΠΊΡ€ΠΎΠΌΠ΅ "-", "." ΠΈ "e" (для экспонСнты)

Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("[^\d\-\.e]");

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, "");

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Число(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ НСопрСдСлСно;

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Π˜Π½Π°Ρ‡Π΅

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ НСопрСдСлСно;

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ;

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°:

  • πŸ”§ Гибкая настройка ΠΏΠΎΠ΄ Π½ΡƒΠΆΠ΄Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ).
  • πŸ›‘οΈ Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ НСопрСдСлСно вмСсто ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ).
  • ⚑ Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π² Ρ€Π°Π·Π½Ρ‹Ρ… модулях.

Для Π΅Ρ‰Ρ‘ большСй гибкости ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками ΠΈ числами, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ:

  • πŸ“Œ ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… символов.
  • πŸ“Œ ΠŸΠ°Ρ€ΡΠΈΠ½Π³ строк с Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ чисСл (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "10-20").
  • πŸ“Œ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π½Π°ΡƒΡ‡Π½ΠΎΠΉ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (1e10).
πŸ’‘

БобствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСобразования строк Π² числа ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ дублирования ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… модулях.

8. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: ΠΎΡ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ²

Рассмотрим Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии, Π³Π΄Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ строк Π² числа ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Excel

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Excel Ρ‡Π΅Ρ€Π΅Π· COMΠžΠ±ΡŠΠ΅ΠΊΡ‚("Excel.Application") ΠΈΠ»ΠΈ ADODB строки с числами ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…. Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π°Π±Π»ΠΈΡ†Ρ‹ Из Π’Π°Π±Π»ΠΈΡ†Π°Excel Π¦ΠΈΠΊΠ»

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π°Π±Π»ΠΈΡ†Ρ‹.Π‘ΡƒΠΌΠΌΠ°) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°") Π’ΠΎΠ³Π΄Π°

Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π°Π±Π»ΠΈΡ†Ρ‹.Π‘ΡƒΠΌΠΌΠ° = БтрокаВЧисло(Π‘Ρ‚Ρ€ΠΎΠΊΠ°Π’Π°Π±Π»ΠΈΡ†Ρ‹.Π‘ΡƒΠΌΠΌΠ°);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: ΠŸΠ°Ρ€ΡΠΈΠ½Π³ JSON/API-ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с REST API ΠΈΠ»ΠΈ JSON-Π΄Π°Π½Π½Ρ‹ΠΌΠΈ числа часто приходят Π² Π²ΠΈΠ΄Π΅ строк. НапримСр, ΠΎΡ‚Π²Π΅Ρ‚ сСрвиса:

{

"price": "1234.56",

"discount": "10,00"

}

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°:

Π”Π°Π½Π½Ρ‹Π΅ = JSON.ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ(ΠžΡ‚Π²Π΅Ρ‚Π‘Π΅Ρ€Π²Π΅Ρ€Π°);

Π¦Π΅Π½Π° = БтрокаВЧисло(Π”Π°Π½Π½Ρ‹Π΅.price, ".");

Π‘ΠΊΠΈΠ΄ΠΊΠ° = БтрокаВЧисло(Π”Π°Π½Π½Ρ‹Π΅.discount, ",");

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°

Π’ Ρ„ΠΎΡ€ΠΌΠ°Ρ… 1Π‘ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ числа с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π²Π°Π»ΡŽΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ тСкстовыми коммСнтариями. НапримСр, Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ "500 Ρ€ΡƒΠ±." вмСсто "500". РСшСниС β€” валидация Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠŸΡ€ΠΈΠ˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈΠ‘ΡƒΠΌΠΌΡ‹(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚)

Если Π’ΠΈΠΏΠ—Π½Ρ‡(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) = Π’ΠΈΠΏ("Π‘Ρ‚Ρ€ΠΎΠΊΠ°") Π’ΠΎΠ³Π΄Π°

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = БтрокаВЧисло(Π­Π»Π΅ΠΌΠ΅Π½Ρ‚.Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅);

ΠšΠΎΠ½Π΅Ρ†Π•ΡΠ»ΠΈ;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹;

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° всСгда ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ понятныС сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. НапримСр, вмСсто ΠΎΠ±Ρ‰Π΅Π³ΠΎ "НСкоррСктноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅: "ПолС 'Π‘ΡƒΠΌΠΌΠ°' Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ','".

Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅Ρ‚ β€” Π²Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ источника Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

FAQ: ЧастыС вопросы ΠΏΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ строк Π² числа

Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π² число (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "1 000 500")?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() для удалСния ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "1 000 500";

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, " ", "");

Число = Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°); // Π²Π΅Ρ€Π½Ρ‘Ρ‚ 1000500

Если ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ тысяч (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°Ρ…), ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° ΠΏΡƒΡΡ‚ΡƒΡŽ строку ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния для Π±ΠΎΠ»Π΅Π΅ слоТных случаСв.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ функция Число() Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ для строки "1.234", хотя Π² настройках Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ β€” Ρ‚ΠΎΡ‡ΠΊΠ°?

ВСроятнСС всСго, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сСанса ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ систСмныС настройки. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части:

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Π‘Π΅Π°Π½ΡΠ°.DecimalSeparator);

Если ΠΎΠ½ отличаСтся ΠΎΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ, установитС Π΅Π³ΠΎ явно ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ:

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π‘Π΅Π°Π½ΡΠ°("DecimalSeparator", ".");

Или Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ строку Π·Π°Ρ€Π°Π½Π΅Π΅, замСняя Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° запятыС (ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚).

Как ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² число с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Π·Π½Π°ΠΊΠ° Π²Π°Π»ΡŽΡ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "$100")?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ рСгулярныС выраТСния ΠΈΠ»ΠΈ Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ() для удалСния символов Π²Π°Π»ΡŽΡ‚Ρ‹:

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = "$100";

Π‘Ρ‚Ρ€ΠΎΠΊΠ° = Π‘Ρ‚Ρ€Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ(Π‘Ρ‚Ρ€ΠΎΠΊΠ°, "$", "");

Число = Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°);

Для слоТных случаСв (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π²Π°Π»ΡŽΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Π΅ строки) ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ = Новый Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅("[\d\.,]+");

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ° = Π Π΅Π³Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.Π˜ΡΠΊΠ°Ρ‚ΡŒ("$100.50");

ЧисловаяБтрока = Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠŸΠΎΠΈΡΠΊΠ°.ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΠ“Ρ€ΡƒΠΏΠΏΡƒ(0);

Число = Число(ЧисловаяБтрока);

Какая функция быстрСС: Число() ΠΈΠ»ΠΈ Val()?

Ѐункция Число() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄ Ρ€Π΅Π³ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΈ Π½Π΅ выполняСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ парсинг символов. Val() ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ строку посимвольно Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ нСдопустимого символа.

Для массовой ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ†ΠΈΠΊΠ»Π°Ρ…) ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Число() послС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ очистки строки ΠΎΡ‚ Π½Π΅Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… символов.

МоТно Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² число с сохранСниСм Π·Π½Π°ΠΊΠΎΠ² послС запятой?

Π”Π°, ΠΎΠ±Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Число() ΠΈ Val() β€” ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, Ссли ΠΎΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π΄Π°Π½Π°. НапримСр:

Число("123,456")  // Π²Π΅Ρ€Π½Ρ‘Ρ‚ 123.456 (Ссли Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ β€” запятая)

Val("123.456") // Π²Π΅Ρ€Π½Ρ‘Ρ‚ 123.456

Однако Ссли строка содСрТит большС Π·Π½Π°ΠΊΠΎΠ² послС запятой, Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Число (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 10 Π·Π½Π°ΠΊΠΎΠ²), ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅. Для Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… вычислСний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚ΠΈΠΏ Π§ΠΈΡΠ»ΠΎΠ‘Π΅Π·ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΡ.