Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Python от октября 24, 2020, 10:33

Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 10:33
Цитата: KW от октября 24, 2020, 09:58
(http://i.piccy.info/i9/220b579552a5b235f32d33a1425d50f2/1603522302/70297/1402066/BANK.jpg)
http://piccy.info/view3/14036556/9439545437a205c28cffd94b797ae1d0/
Где-то передали номер телефона как число (а не строку), которое, с точки зрения JS, после определенной величины всегда обрабатывается как float.
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 11:50
Цитата: Python от октября 24, 2020, 10:33
Где-то передали номер телефона как число (а не строку), которое, с точки зрения JS, после определенной величины всегда обрабатывается как float.
А JS вообще различает число и строку (если явно не определять тип или пробел в зад не совать)?
Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 12:02
Цитата: zwh от октября 24, 2020, 11:50
Цитата: Python от октября 24, 2020, 10:33
Где-то передали номер телефона как число (а не строку), которое, с точки зрения JS, после определенной величины всегда обрабатывается как float.
А JS вообще различает число и строку (если явно не определять тип или пробел в зад не совать)?
Различает, хотя и преобразовывает одно в другое неявным образом без лишних усложнений.

> "123456789012345678901234567890"
'123456789012345678901234567890'

> +"123456789012345678901234567890"
1.2345678901234568e+29

> 123456789012345678901234567890+''
'1.2345678901234568e+29'
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 12:29
Цитата: Python от октября 24, 2020, 12:02
Цитата: zwh от октября 24, 2020, 11:50
Цитата: Python от октября 24, 2020, 10:33
Где-то передали номер телефона как число (а не строку), которое, с точки зрения JS, после определенной величины всегда обрабатывается как float.
А JS вообще различает число и строку (если явно не определять тип или пробел в зад не совать)?
Различает, хотя и преобразовывает одно в другое неявным образом без лишних усложнений.

> "123456789012345678901234567890"
'123456789012345678901234567890'

> +"123456789012345678901234567890"
1.2345678901234568e+29

> 123456789012345678901234567890+''
'1.2345678901234568e+29'

ИМХО в последнем случае преобразование не очень логичное. Видимо, что-то подобное получилось и в приведенном примере с "Приватбанком".
Название: *номера телефонов в JS
Отправлено: Bhudh от октября 24, 2020, 12:37
Стал проверять в консоли и обнаружил, что Opera Dragonfly различает int и float с определённой величины. А хромовским инструментам пофиг.
Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 13:12
Цитата: zwh от октября 24, 2020, 12:29
ИМХО в последнем случае преобразование не очень логичное.
Логика в том, что число, записанное как целое, если оно больше максимального допустимого целого значения, рассматривается как float. Которое при таком значении отображается в экспоненциальном виде:
> 123456789012345678901234567890
1.2345678901234568e+29

Ну и дальше такая запись конвертируется в строку.
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 13:42
Цитата: Python от октября 24, 2020, 13:12
Цитата: zwh от октября 24, 2020, 12:29
ИМХО в последнем случае преобразование не очень логичное.
Логика в том, что число, записанное как целое, если оно больше максимального допустимого целого значения, рассматривается как float. Которое при таком значении отображается в экспоненциальном виде:
> 123456789012345678901234567890
1.2345678901234568e+29

Ну и дальше такая запись конвертируется в строку.
Это-то как раз понятно. Непонятен последний случай, когда после конкатенации с пробелом число переделали во float, а потом преобразовали это в строку.
Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 14:03
Цитата: zwh от октября 24, 2020, 13:42
Цитата: Python от октября 24, 2020, 13:12
Цитата: zwh от октября 24, 2020, 12:29
ИМХО в последнем случае преобразование не очень логичное.
Логика в том, что число, записанное как целое, если оно больше максимального допустимого целого значения, рассматривается как float. Которое при таком значении отображается в экспоненциальном виде:
> 123456789012345678901234567890
1.2345678901234568e+29

Ну и дальше такая запись конвертируется в строку.
Это-то как раз понятно. Непонятен последний случай, когда после конкатенации с пробелом число переделали во float, а потом преобразовали это в строку.
Число переделали во float еще до конкатенации — на этапе трансляции кода.
Название: *номера телефонов в JS
Отправлено: Karakurt от октября 24, 2020, 14:14
А можно ссылку на страницу?
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 15:07
Цитата: Python от октября 24, 2020, 14:03
Цитата: zwh от октября 24, 2020, 13:42
Цитата: Python от октября 24, 2020, 13:12
Цитата: zwh от октября 24, 2020, 12:29
ИМХО в последнем случае преобразование не очень логичное.
Логика в том, что число, записанное как целое, если оно больше максимального допустимого целого значения, рассматривается как float. Которое при таком значении отображается в экспоненциальном виде:
> 123456789012345678901234567890
1.2345678901234568e+29

Ну и дальше такая запись конвертируется в строку.
Это-то как раз понятно. Непонятен последний случай, когда после конкатенации с пробелом число переделали во float, а потом преобразовали это в строку.
Число переделали во float еще до конкатенации — на этапе трансляции кода.
А, т.е. как-то так надо было писать? --

если х=1234567890

document.writeln('"'+x+'" ')
Название: *номера телефонов в JS
Отправлено: Karakurt от октября 24, 2020, 15:10
JS must die
Название: *номера телефонов в JS
Отправлено: Bhudh от октября 24, 2020, 15:36
Цитата: zwh от октября 24, 2020, 15:07А, т.е. как-то так надо было писать? --

если х=1234567890

document.writeln('"'+x+'" ')
А это как поможет?
Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 16:35
Цитата: zwh от октября 24, 2020, 15:07
А, т.е. как-то так надо было писать? --

если х=1234567890

document.writeln('"'+x+'" ')

Нет, если мы хотим, чтобы все цифры большого числа гарантированно оставались на месте, то его лучше изначально задавать не как число, а как строку:

x='1234567890'

document.writeln(x)
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 18:17
Цитата: Python от октября 24, 2020, 16:35
Цитата: zwh от октября 24, 2020, 15:07
А, т.е. как-то так надо было писать? --

если х=1234567890

document.writeln('"'+x+'" ')

Нет, если мы хотим, чтобы все цифры большого числа гарантированно оставались на месте, то его лучше изначально задавать не как число, а как строку:

x='1234567890'

document.writeln(x)

А если оно в переменной уже как число неизвестной величины, а хочется вывести так, чтобы все цифры показать, тогда как записать?
Название: *номера телефонов в JS
Отправлено: Python от октября 24, 2020, 18:44
Цитата: zwh от октября 24, 2020, 18:17
Цитата: Python от октября 24, 2020, 16:35
Цитата: zwh от октября 24, 2020, 15:07
А, т.е. как-то так надо было писать? --

если х=1234567890

document.writeln('"'+x+'" ')

Нет, если мы хотим, чтобы все цифры большого числа гарантированно оставались на месте, то его лучше изначально задавать не как число, а как строку:

x='1234567890'

document.writeln(x)

А если оно в переменной уже как число неизвестной величины, а хочется вывести так, чтобы все цифры показать, тогда как записать?
Правильный вопрос. Из того, что нагуглилось: можно использовать метод toFixed — впрочем, числа, если они float, хранятся в округленном виде, и если цифр достаточно много, то последние цифры могут замениться чем-то другим. Кроме того, с достаточно большими числами этот метод может и не работать (во всяком случае, в node так), а недостаточно большие и сами отображаются как целые (причем, toFixed и обычное преобразование в строку может давать разный результат).

> 1234567890123456789012
1.2345678901234568e+21

> 1234567890123456789012 .toFixed(0)
'1.2345678901234568e+21'

> 123456789012345678901 .toFixed(0)
'123456789012345683968'
> 123456789012345678901 .toFixed()
'123456789012345683968'

> 123456789012345678901
123456789012345680000
> 123456789012345678901+''
'123456789012345680000'
Название: *номера телефонов в JS
Отправлено: BormoGlott от октября 24, 2020, 19:19
Цитата: Python от октября 24, 2020, 18:44
> 1234567890123456789012
1.2345678901234568e+21

> 1234567890123456789012 .toFixed(0)
'1.2345678901234568e+21'

> 123456789012345678901 .toFixed(0)
'123456789012345683968'
> 123456789012345678901 .toFixed()
'123456789012345683968'

> 123456789012345678901
123456789012345680000
> 123456789012345678901+''
'123456789012345680000'
Юмор из жизни  :what:
Название: *номера телефонов в JS
Отправлено: RockyRaccoon от октября 24, 2020, 20:14
Ага, ухохочешься.
Название: *номера телефонов в JS
Отправлено: zwh от октября 24, 2020, 20:55
Цитата: RockyRaccoon от октября 24, 2020, 20:14
Ага, ухохочешься.
Дак прикольно же, что любая циферка в нолик может превратиться -- просто магия какая-то!
Название: *номера телефонов в JS
Отправлено: Upliner от октября 24, 2020, 22:14
Цитата: Karakurt от октября 24, 2020, 15:10
JS must die
Ага. Хром уже поддерживает Dart в качестве замены. Там такие фокусы не пройдут.
Название: *номера телефонов в JS
Отправлено: Python от октября 25, 2020, 02:28
Цитата: zwh от октября 24, 2020, 20:55
Цитата: RockyRaccoon от октября 24, 2020, 20:14
Ага, ухохочешься.
Дак прикольно же, что любая циферка в нолик может превратиться -- просто магия какая-то!
Да, JS'у определенно не хватает безразмерных целых чисел, как в питоне и лиспе.
С другой стороны, зачем хранить номер телефона в виде числа, если какие-либо арифметические операции к нему все равно никогда не применяются? Разве что с целью сжатия в памяти, да и то выгода сомнительна (особенно если в номере есть начальные нули).
Название: *номера телефонов в JS
Отправлено: Bhudh от октября 25, 2020, 02:51
Цитата: Upliner от октября 24, 2020, 22:14Хром уже поддерживает Dart в качестве замены.
Ага, ещё бы браузер, который разрабатывает гугл, не поддерживал языка, который разрабатывает гугл...
Только как вспомнишь, сколько такого поддерживаемого гугл разрабатывал-разрабатывал, да и спустил в унитаз... Вместе со всеми трудами и контентом, предоставленным пользователями.
Название: *номера телефонов в JS
Отправлено: Python от октября 25, 2020, 03:40
А еще когда-то в ІЕ можно было использовать VBS вместо JS (интересно, в Эдже этот язык еще поддерживается?).
Название: *номера телефонов в JS
Отправлено: zwh от октября 25, 2020, 07:27
Цитата: Python от октября 25, 2020, 02:28
Цитата: zwh от октября 24, 2020, 20:55
Цитата: RockyRaccoon от октября 24, 2020, 20:14
Ага, ухохочешься.
Дак прикольно же, что любая циферка в нолик может превратиться -- просто магия какая-то!
Да, JS'у определенно не хватает безразмерных целых чисел, как в питоне и лиспе.
С другой стороны, зачем хранить номер телефона в виде числа, если какие-либо арифметические операции к нему все равно никогда не применяются? Разве что с целью сжатия в памяти, да и то выгода сомнительна (особенно если в номере есть начальные нули).
А это может быть и не телефон, а какой-нить там инвентаризационный номер, для которого могут иметь смысл операции вроде "если три цифры со второй по пятую больше ХХХ, то ..."
Название: *номера телефонов в JS
Отправлено: Bhudh от октября 25, 2020, 13:16
Цитата: Python от октября 25, 2020, 03:40А еще когда-то в ІЕ можно было использовать VBS вместо JS
Если б только в IE...

Цитата: Центр справки и поддержки. СценарииОперационная система Windows ХР0 включает сервер сценариев Windows — не зависящий от языка сценариев сервер для 32-разрядных платформ Windows, включающих поддержку как сценариев Visual Basic Scripting Edition ((VBScript; файлы .vbs), так и сценариев и JScript (файлы .js). Сервер сценариев Windows может использоваться для запуска файлов сценария .vbs и .js непосредственно с рабочего стола или из командной строки, не вставляя их в документ HTML.