Сообщество
Логин
Пароль
Забыли пароль?     Регистрация
От всей души
Мы старались, делали.
Можно поблагодарить разработчиков любой суммой.
Общение / Веб версия / Глюк при вводе транзакций, начинающихся с нуля

Глюк при вводе транзакций, начинающихся с нуля

Андрей
19 июня 2014 08:53
Наблюдается странный глюк при вводе транзакций, начинающихся с нуля. Например, если ввести транзакцию 030 рублей, то сохранится сумма 24 рубля (0655 рублей превращается в 429 рубля и т.п.). Хотя некоторые операции обрабатываются нормально (например 090 рублей).
Ilyan
19 июня 2014 10:13
В IT принято добавлять 0 в начало при записи чисел в 8-ричной системе счисления.

Если число содержит цифры 8 или 9, оно не может быть 8-ричным и считывается как обычное десятичное.
RsH
19 июня 2014 10:52
ну наверное надо срезать первые 0 :) или выдавать ошибку "уточните сумму" потому что в учете финансов это явные ошибки ввода. Сомневаюсь что кто то считает расходы в восьмеричной системе :)
Admin
 
19 июня 2014 11:11
RsH Пишет:
ну наверное надо срезать первые 0 :)
Хорошая мысль.
Прикрутили отрезатель первых нулей в сумме. Должно помочь.
Но пока только именно в первой сумме, если ввести выражение вида 25 + 030, то 030 по прежнему будет трактоваться как восьмеричное.
RsH
19 июня 2014 14:08
Admin Пишет:
RsH Пишет:ну наверное надо срезать первые 0 :)Хорошая мысль. Прикрутили отрезатель первых нулей в сумме. Должно помочь. Но пока только именно в первой сумме, если ввести выражение вида 25 + 030, то 030 по прежнему будет трактоваться как восьмеричное.
видимо для преобразования строки в формулу используете готовый компонент,
Тогда можно поставить доп проверку строки перед передачей на разбор. Типа если после + - / * ) стоит 0 выдавать ошибку "сумма не может начинаться с 0".
RsH
19 июня 2014 17:25
хотя нет не прав, суммы могут начинаться с 0 если после 0 идет . или ,
разделитель дробной части короче.
Ilyan
19 июня 2014 18:34
Admin Пишет:
Прикрутили отрезатель первых нулей в сумме.
Регулярным выражением?

Тогда почему не что-то вроде s/\b0+(\d)/$1/g ?
Admin
 
19 июня 2014 18:37
Ilyan Пишет:
Регулярным выражением?
Нет.
Ilyan
19 июня 2014 18:40
Поправка:

s/(?<![\d.,])0+(\d)/$1/g

* вырезать все последовательности 0, перед которыми не цифра, точка или запятая, а после которых цифра.
Admin
 
19 июня 2014 18:44
А это: 12 000 ?
Ilyan
19 июня 2014 19:07
Легко:

s/\s+//g
s/(?<![\d.,])0+(?=\d)//g
Admin
 
19 июня 2014 21:59
Как понять две строки, вы имеете ввиду последовательно выполнить два рег. выражения?
RsH
20 июня 2014 00:16
Ну видимо да. Первая выбивает все пробелы. Вторая удаляет 0.
Ilyan
20 июня 2014 11:40
Admin Пишет:
вы имеете ввиду последовательно выполнить два рег. выражения?
А вы никогда этого раньше не делали? :)
Чтобы отвечать на сообщения - зарегистрируйтесь и войдите в личный кабинет.