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

НСкоррСктноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ точности ΠΈΠ»ΠΈ ошибкам Ρ‚ΠΈΠΏΠ° "ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°". Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ простым отбрасываниСм Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части ΠΈ матСматичСским ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ точности вычислСний.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, арифмСтичСскиС Ρ‚Ρ€ΡŽΠΊΠΈ ΠΈ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠΎΠΌ Число Π² ΠΊΠΎΠ΄Π΅ 1Π‘.

Ѐункция Π¦Π΅Π»: отбрасываниС Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части

Π‘Π°ΠΌΡ‹ΠΉ простой ΠΈ быстрый способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ числа β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π¦Π΅Π»(Число). Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Число, отбрасывая Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ округлСния. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ truncate Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ данная функция всСгда округляСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² сторону мСньшСго ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ значСния (для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл β€” Π²Π½ΠΈΠ·, для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… β€” Π²Π²Π΅Ρ€Ρ… ΠΊ Π½ΡƒΠ»ΡŽ). Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ строго ΠΎΡ‚ΡΠ΅Ρ‡ΡŒ "хвост" послС запятой, это ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ДробноСЧисло = 15.99;

ЦСлоСЧисло = Π¦Π΅Π»(ДробноСЧисло); // Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 15

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями Π»ΠΎΠ³ΠΈΠΊΠ° сохраняСтся: функция Π¦Π΅Π»(-15.99) Π²Π΅Ρ€Π½Π΅Ρ‚ -15, Π° Π½Π΅ -16. Π­Ρ‚ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ расчСтах ΡƒΠ±Ρ‹Ρ‚ΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… остатков, Π³Π΄Π΅ матСматичСскоС ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

πŸ’‘

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π¦Π΅Π»() для получСния количСства Ρ†Π΅Π»Ρ‹Ρ… Π΅Π΄ΠΈΠ½ΠΈΡ† Π² ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° остаток мСньшС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ физичСского смысла.

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠžΠΊΡ€ΡƒΠ³Π»

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ простого отбрасывания, функция ΠžΠΊΡ€ΡƒΠ³Π»(Число, ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΡ) позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части. Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт для финансовых расчСтов, Π³Π΄Π΅ дСйствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ "5 Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ большСй Ρ†ΠΈΡ„Ρ€Ρ‹" ΠΈΠ»ΠΈ банковскоС ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСт ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ повСдСния ΠΏΡ€ΠΈ достиТСнии сСрСдины ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1Π‘ прСдоставляСт нСсколько ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… констант для этого, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΡ.Π’Π²Π΅Ρ€Ρ…, Π’Π½ΠΈΠ· ΠΈΠ»ΠΈ ΠŸΠΎΠΡ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠŸΡ€Π°Π²ΠΈΠ»Π°ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования арифмСтичСского округлСния Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ:

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = 10.5;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = ΠžΠΊΡ€ΡƒΠ³Π»(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΠ°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΡ.ΠŸΠΎΠΡ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠŸΡ€Π°Π²ΠΈΠ»Π°ΠΌ); // Π’Π΅Ρ€Π½Π΅Ρ‚ 11

Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, систСма ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ арифмСтичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π°. Однако явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ направлСния Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ошибок ΠΏΡ€ΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π΅.

πŸ“Š Какой ΠΌΠ΅Ρ‚ΠΎΠ΄ округлСния Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
Π¦Π΅Π»()
ΠžΠΊΡ€ΡƒΠ³Π»()
Ручная Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°
ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°

АрифмСтичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ прСобразования

Иногда использованиС встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ»ΠΈ нСцСлСсообразно ΠΈΠ·-Π·Π° спСцифики Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ матСматичСскиС Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ для эмуляции Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ повСдСния. НапримСр, для округлСния Π΄ΠΎ блиТайшСго Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 0.5 ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π¦Π΅Π».

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

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа:

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ = 12.4;

Π¦Π΅Π»ΠΎΠ΅ = Π¦Π΅Π»(Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ + 0.5); // Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 12

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅2 = 12.6;

Π¦Π΅Π»ΠΎΠ΅2 = Π¦Π΅Π»(Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅2 + 0.5); // Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ 13

ИспользованиС Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠΈ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ Π² высоконагруТСнных Ρ†ΠΈΠΊΠ»Π°Ρ…, Π³Π΄Π΅ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΡΠΊΠΎΠΏΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ, хотя Π² соврСмСнных вСрсиях ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Π½ΠΈΡ†Π° Π½ΠΈΠ²Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Π² Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ΅

Для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π¦Π΅Π»(Число + 0.5) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния классичСского округлСния. Для Π½ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π¦Π΅Π»(Число - 0.5).

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ особСнности ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Π’ языкС 1Π‘ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Число являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ†Π΅Π»Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Π΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ значСния. Π―Π²Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° "Integer" Π² языкС Π½Π΅Ρ‚, поэтому понятиС "Ρ†Π΅Π»ΠΎΠ΅ число" относится скорСС ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ дробная Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π²Π½Π° Π½ΡƒΠ»ΡŽ, Ρ‡Π΅ΠΌ ΠΊ строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ΠŸΡ€ΠΈ присваивании значСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ типизация происходит динамичСски. Если Π²Ρ‹ записываСтС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСний Π² Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚ справочника с Ρ‚ΠΈΠΏΠΎΠΌ "Число(15,0)", систСма автоматичСски отбросит Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈ записи Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π² памяти пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΏΡ€ΠΈ сравнСнии чисСл. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10.0 ΠΈ 10 Ρ€Π°Π²Π½Ρ‹ матСматичСски, Π½ΠΎ ΠΈΡ… строковоС прСдставлСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…, Ссли Π½Π΅ настроСно Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² XML ΠΈΠ»ΠΈ JSON дробная Ρ‡Π°ΡΡ‚ΡŒ ".00" ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π΄Π°ΠΆΠ΅ Ρƒ Ρ†Π΅Π»Ρ‹Ρ… чисСл, Ссли Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ сСриализациСй ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² получСния Ρ†Π΅Π»ΠΎΠ³ΠΎ числа

Π’Ρ‹Π±ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° зависит ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ: Π½ΡƒΠΆΠ½Π° Π»ΠΈ Π²Π°ΠΌ матСматичСская Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΈΠ»ΠΈ спСцифичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ различия Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ….

Анализ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ расхоТдСния Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… значСниях (0.5) ΠΈ Π² области ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ тСстирования Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΡƒΡŽ ΡΠΊΡΠΏΠ»ΡƒΠ°Ρ‚Π°Ρ†ΠΈΡŽ.

Π’Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ѐункция Π¦Π΅Π»() ΠžΠΊΡ€ΡƒΠ³Π»(Π’Π²Π΅Ρ€Ρ…) ΠžΠΊΡ€ΡƒΠ³Π»(Π’Π½ΠΈΠ·) АрифмСтичСскоС
10.2 10 11 10 10
10.5 10 11 10 11
10.8 10 11 10 11
-10.5 -10 -10 -11 -10
πŸ’‘

Ѐункция Π¦Π΅Π»() всСгда двиТСтся ΠΊ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠžΠΊΡ€ΡƒΠ³Π»(Π’Π½ΠΈΠ·) для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π² минус Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок ΠΈ валидация Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π½Π΅ΡˆΠ½ΠΈΡ… источников (Ρ„Π°ΠΉΠ»Ρ‹, Π²Π΅Π±-сСрвисы) Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° НСопрСдСлСно ΠΈΠ»ΠΈ строка. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π¦Π΅Π» ΠΊ нСчисловому Ρ‚ΠΈΠΏΡƒ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ runtime.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ рСкомСндуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π’ΠΈΠΏΠ—Π½Ρ‡ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°...Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΉ остановки ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного прСобразования:

Если Π’ΠΈΠΏΠ—Π½Ρ‡(ВходящиСДанныС) = Π’ΠΈΠΏ("Число") Π’ΠΎΠ³Π΄Π°

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Π¦Π΅Π»(ВходящиСДанныС);

Π˜Π½Π°Ρ‡Π΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = 0; // Или ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибки

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

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ограничСния Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ чисСл Π² 1Π‘. Π₯отя ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΡΠΊΡΡ‚Ρ€Π΅ΠΌΠ°Π»ΡŒΠ½ΠΎ большими значСниями дробная Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ разряды ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… опСрациях.

β˜‘οΈ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ: 0 / 4
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, приходящими ΠΈΠ· Π²Π΅Π±-сСрвисов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ прСдставлСния. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠžΠΊΡ€ΡƒΠ³Π»() ΠΏΠ΅Ρ€Π΅Π΄ Π¦Π΅Π»() для очистки ΠΎΡ‚ машинной ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 10.000000001).

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

Π’ Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π¦Π΅Π»() ΠΈ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎ 0 Π·Π½Π°ΠΊΠΎΠ²?

Ѐункция Π¦Π΅Π»() просто отбрасываСт Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ, двигаясь ΠΊ Π½ΡƒΠ»ΡŽ. ΠžΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎ 0 Π·Π½Π°ΠΊΠΎΠ² с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠŸΠΎΠΡ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠŸΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число, Ссли дробная Ρ‡Π°ΡΡ‚ΡŒ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Π° 0.5. Для ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл Ρ€Π°Π·Π½ΠΈΡ†Π° Π²ΠΈΠ΄Π½Π° Π½Π° значСниях Ρ‚ΠΈΠΏΠ° 10.5.

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число ΠΈΠ· строки "123.45"?

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ строку Π² число с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Число(Π‘Ρ‚Ρ€ΠΎΠΊΠ°), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π¦Π΅Π»(). ΠŸΡ€ΡΠΌΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΊ строкС Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ†Π΅Π»Ρ‹Ρ… чисСл получаСтся Π΄Ρ€ΠΎΠ±ΡŒ?

Π’ 1Π‘ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ дСлСния / всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π΄Π°ΠΆΠ΅ Ссли Π΄Π΅Π»ΠΈΠΌΠΎΠ΅ ΠΈ Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Ρ†Π΅Π»Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π¦Π΅Π»(А / Π‘).

МоТно Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа Π² рСгистрС свСдСний?

Π”Π°, ΠΏΡ€ΠΈ создании рСсурса рСгистра ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Число(15,0). Однако ΠΏΡ€ΠΈ записи значСния 10.9 систСма автоматичСски ΠΎΠΊΡ€ΡƒΠ³Π»ΠΈΡ‚ ΠΈΠ»ΠΈ отбросит Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π² зависимости ΠΎΡ‚ настроСк Π‘Π£Π‘Π” ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ это явно Π² ΠΊΠΎΠ΄Π΅.