Как привести строку к числу 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 , используя преобразования типов и конкатенацию. Для этого нужно выполнить два преобразования: сначала в целое число, а затем в строку
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.