Андрей
|
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 Пишет: вы имеете ввиду последовательно выполнить два рег. выражения? А вы никогда этого раньше не делали? :)
|
|
|