Как привести строку к числу php
Перейти к содержимому

Как привести строку к числу php

  • автор:

Как привести строку к числу php

есть процедура/функция по сабжу, чтобы всякую строку правильно жевало? наверняка есть в БСП такое.
чтобы нормально преобразовывало всякое типа
123’456-23
123’456
47
123,456.23
123.456.789,23
123 456 789.00
итд
..
.
если есть — можно код закинуть сюда?

по идее, в общем виде же не решается
45,783 — это число 45.783 или 45783.
С учетом настроек в виндоус?

(2) нет. на входе — строка, на выходе д.б. число.
там где была сформировано число как строка — хз какие настройки и вообще хз какое форматирование

так-то придумал с нижеследующими допущениями, но вдруг кто красивое что-то
// простые допущения:
// 1. разделитель дробной части — не более одного раза встречается
// 2. разделителем дробной части м.б. из набора «.,-»
.
но такие допущения в общем случае не позволят всегда правильно трактовать
например: 45,783 — м.б. это число с 3-мя дробными цифрами, а м.б. это число без дробной части.
.
придется вводить допущение/параметр еще один «Разрядность»,
если Разрядность=2 — тогда 45,783 есть число без дробной части
если Разрядность=3 — тогда 45,783 есть либо дробное число либо целое число — опять однозначно не сказать.

123,456,783 — тут понятнее, это число без дробной части

напышы сам.
1) первый справа символ точки или запятой считать разделителем дробной части — если таких символов в строке больше нет — заменяем его на точку и от нее включительно переносим в промежуточную строку.
2) из остальной части исходной строки тупо вырезаются все не цифровые символы, после чего к ней справа приклеивается промежуточная строка (см.п.2) и от результата вычисляется любимая одинесовская стандартная функция «Число(..)».

(6) это я ужо придумал
(6) только чуток посложнее
реквизит «разделитель дробной части» на форму, в ОО вроде так например
(9) фу, какая гадость
(10) ну отправь в работу ошибочные данные, делов то. «отряхнулся и дальше пошел» (с)
(11) фу, какая гадость-2

и да, вот от кого-кого, но от Серёги ну точно не ожидал таких настойчивых попыток «автоматизировать бардак» (с)

(13) «а шо делать?!»
во входящих экселях что угодно может быть.
я почему и спрашиваю — ну стопудово это кто-то уже пилил.

(14): не что угодно.
пилил. сразу поставил заказчика перед фактом — бардак автоматизировать низя. превратили в не-бардак, чотко оговорив форматы входных данных.
потом было иногда весело когда аргументом со стороны источника «там нихера же не нуль ну как же вы элементарных вещей не понимаете» — с нашим ответом «все элементарные вещи перечислены в вашей инструкции, остальное — ноль.»

(15) спасибо, я в курске.
(14) а может быть цена за полкило 0.5 рубль сорок 1,4?
накидайте тестовых строк-чисел, исходим что представление числа строкой — формально правильное
Вроде наваял, норм.
уже капчу автоматом распознают, а тут ексель какой-то))
(20) есть приблуда для браузера для автоввода капчи?

Функция СтрокаВЧисло(Знач Значение) Экспорт

Значение = СтрЗаменить(Значение, » «, «»);
Если СтрНачинаетсяС(Значение, «(«) Тогда
Значение = СтрЗаменить(Значение, «(«, «-«);
Значение = СтрЗаменить(Значение, «)», «»);
КонецЕсли;

СтрокаБезНулей = СтрЗаменить(Значение, «0», «»);
Если ПустаяСтрока(СтрокаБезНулей) Или СтрокаБезНулей = «-» Тогда
Возврат 0;
КонецЕсли;

ТипЧисло = Новый ОписаниеТипов(«Число»);
Результат = ТипЧисло.ПривестиЗначение(Значение);

Возврат ?(Результат <> 0 И Не ПустаяСтрока(СтрокаБезНулей), Результат, Неопределено);

СтроковыеФункцииКлиентСервер

// Преобразует исходную строку в число без вызова исключений.
//
// Параметры:
// Значение — Строка — Строка, которую необходимо привести к числу.
// Например, «10», «+10», «010», вернет 10;
// «(10)», «-10»,вернет -10;
// «10,2», «10.2»,вернет 10.2;
// «000», » «, «»,вернет 0;
// «10текст», вернет Неопределено.
//
// Возвращаемое значение:
// Число, Неопределено — Полученное число, либо Неопределено, если строка не является числом

(24)
а «123’456’789,23» — что вернет?
а «123,238» — что вернет?
а «123,2389» — что вернет?
(25) ХЗ. Неохота проверять.
Просил БСП, вот тебе БСП.
осталось понять как работает ПривестиЗначение 😉
(25) так то эксель может и 123,456.789Е-2 прислать
(0) (31) В sheet1.xml ? Там разве отображение хранится, а не значение?
Ну может еще на id строки ссылаться
(32) не подсказывай

(34) глянул, там есть нюансы с плавающей точкой, но вопрос с форматами и региональными настройками решит в (0)

(21) не, нету. я как то стараюсь такие задачи не цеплять. правильно сказали выше — надо жестко закреплять входящие форматы, иначе под всех гадать жизни не хватит.

(31) ну, в фин.документах — вряд ли.
а 123.456,78 — вполне возможно.

Когда я много загружал из Excel — я делал вот так (в комментариях — альтернативные способы непосредственно перевода строки в число):

&НаСервереБезКонтекста
Функция ЗначениеВСтроку(СтрокаИсходная)

Если Не ЗначениеЗаполнено(СтрокаИсходная) Или (НРег(СтрокаИсходная) = «null») Тогда
Возврат «»;
КонецЕсли;

&НаСервереБезКонтекста
Функция ЗначениеВЧисло(Знач ИсходноеЗначение, БылаОшибкаПреобразования = Ложь)

ЗначениеВЧисло = ?(ЗначениеЗаполнено(ИсходноеЗначение), ИсходноеЗначение, 0); // фильтруем необычные пустые значения

Если ТипЗнч(ЗначениеВЧисло) = Тип(«Число») Тогда
Возврат ИсходноеЗначение;
ИначеЕсли ТипЗнч(ЗначениеВЧисло) = Тип(«Строка») Тогда

ЗначениеВЧисло = ЗначениеВСтроку(ИсходноеЗначение);
ЗначениеВЧисло = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(ЗначениеВЧисло);

//ОписаниеТипа = Новый ОписаниеТипов(«Число»);
//ЗначениеВЧисло = ОписаниеТипа.ПривестиЗначение(ЗначениеВЧисло);

//Попытка
// ЗначениеВЧисло = Число(ЗначениеВЧисло);
//Исключение
//
// ЗначениеВЧисло = Неопределено;
// БылаОшибкаПреобразования = Истина;
//
//КонецПопытки;

Иначе
ЗначениеВЧисло = Неопределено;
КонецЕсли;

выбросить из строки все, кроме цифр(0-9), вытащить из формата ячейки количество знаков дробной части
и потом, исходные данные эксель должен хранить в каком то статичном виде, а уже потом, учитывая формат, указанный пользователем, рисовать в ячейке представление

Ячейка.NumberFormat — формат ячейки, его можно читать и устанавливать
Если не заморачиваться, то можно попробовать просто перед обработкой менять на конкретный вариант формата и будет всегда одинаковый вариант строки

(40) «Ячейка.NumberFormat»
это подразумевает обращение к внешнему объекту, экселю.
исходим из того, что никаких экселей нет. Есть число в виде строки и всё.

TypeScript Преобразование типов

Преобразование типов — это возможность преобразования из одного типа данных в другой. TypeScript предоставляет нам встроенные функции для выполнения преобразования типов.

Мы можем преобразовать число в строку, используя конструктор строки, как показано ниже.

let number: number = 42; let numberAsString: string = String(number); console.log(typeof number); console.log(typeof numberAsString);

Результат:
number
string

Мы можем преобразовать String в Number, используя конструктор Number, как показано ниже.

let stringAsNumber: string = "42"; let number: number = Number(stringAsNumber); console.log(typeof stringAsNumber); console.log(typeof number);

Результат:
string
number

Share this page:

Report Error in Content

PHP: Явное преобразование типов

Преобразование типов — частая операция в веб-разработке. Для ее выполнения можно полагаться на слабую типизацию. Но во многих ситуациях лучше делать преобразование явно с помощью специального синтаксиса. Такой код понятнее и предсказуемее.

Пример явного преобразования типов:

 'Это 5' 

Явное преобразование типа работает так: перед значением в скобках указывается желаемый тип. В результате значение справа преобразуется в значение другого типа, указанного слева в скобках. На текущий момент мы знакомы только с двумя типами, но преобразование работает для любого типа.

В более сложных ситуациях при использовании функций, которые будем проходить позже, встречаются множественные преобразования: (string) (5 + ((int) ‘4’)) . Порядок вычисления этого выражения следующий:

Задание

Выведите на экран строку 2 times , полученную из числа 2.9 и строки times , используя преобразования типов и конкатенацию. Для этого нужно выполнить два преобразования: сначала в целое число, а затем в строку

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *