![]() |
![]() |
![]() |
|
V7: Преобразование строки в число | ☑ | ||
---|---|---|---|---|
0
Bart
11.08.05
✎
16:53
|
В 1C7 нужно преобразовать строку в число. Вроде все просто:
Сумма = Число(СтрокаСуммы); Но почему-то исчезает дробная часть. Если СтрокаСуммы = "2484,96", то Сумма почему-то = 2484. Заменил в строке запятую на точку - никакого эффекта, и точка вместо запятой почему-то не появляется. В чем тут дело? |
|||
1
shura
11.08.05
✎
16:55
|
А откуда такая уверенность, что дробная часть пропадает?
|
|||
2
Rovan
гуру
11.08.05
✎
17:00
|
(0) Как заменял - показывай
|
|||
3
Vahe
11.08.05
✎
17:01
|
(0) не встречал такую проблему,
но ты можеш строку разделить на: до "," и после "," А ччисло(после) делить на 1+Столько 0-ей сколко СтрДлина(СокрЛП(после)) и плюсовать |
|||
4
Bart
11.08.05
✎
17:01
|
(1) Потому что я не вижу ее на экране, когда выполняю следующие команды:
Сумма = Число(СтрокаСуммы); Сообщить("Сумма =" + Сумма ); И в дальнейших расчетах с числом Сумма дробная часть не учитывается - счета неправильно формируются. Поэтому, собственно, я и увидел, что что-то не в порядке. |
|||
5
Лис в курятнике
11.08.05
✎
17:02
|
тут программист нужон....
|
|||
6
Vahe
11.08.05
✎
17:02
|
(4) попробуй как в (3)
|
|||
7
Vahe
11.08.05
✎
17:02
|
(5) кому нужен???
|
|||
8
Лис в курятнике
11.08.05
✎
17:04
|
(7) ну не мне же...
|
|||
9
Bart
11.08.05
✎
17:05
|
(2) СтрЗаменить(ЧислоСтр,",",".");
(3) Ну конечно, могу. Но как-то глупо кажется заниматься такими извращениями, когда речь-то идет о простой, стандартной, часто выполняемой операции. Что, так и надо делать, другого пути нет? |
|||
10
Vahe
11.08.05
✎
17:06
|
Я просто никогда такой ошибки не всречал, щас сам попробую
|
|||
11
shura
11.08.05
✎
17:07
|
В отладчике глядел?
|
|||
12
Лис в курятнике
11.08.05
✎
17:07
|
т.е. вот так вот глючит?
СтрокаСуммы=СтрЗаменить(ЧислоСтр,",","."); Сумма = Число(СтрокаСуммы); Сообщить("Сумма =" + Сумма ); |
|||
13
Vahe
11.08.05
✎
17:08
|
сообщить(Число("111.23"))<-- Все нормально работает, ошибка в другом, поищи
|
|||
14
Crew
11.08.05
✎
17:11
|
Сумма=1.2;
Сообщить(Сумма); Сумма - ревизит формы/агрегатного объекта... |
|||
15
Bart
11.08.05
✎
17:20
|
Я попробовал вот так:
Сообщить(" Число(2484,96)= " + Число("2484,96") ); Сообщить(" Число(2484.96)= " + Число("2484.96") ); Результат вот такой: Число(2484,96)= 2484 Число(2484.96)= 2484.96 Т.е. преобразование в число работает, если стоит точка. А у меня не работает замена запятой на точку... Все, я понял в чем дело, спасибо. Я неправильно применял функцию СтрЗаменить. |
|||
16
AlBorodulin
11.08.05
✎
17:29
|
///Выборка числа из (практически любой) строки
Функция Знач(Стро) Экспорт ///Бородулин А.И. стр=стро; стр=СтрЗаменить(стр,"р.","."); стр=СтрЗаменить(стр,"Р.","."); стр=СтрЗаменить(стр,"руб.","."); стр=СтрЗаменить(стр,"Руб.","."); СТР=СтрЗаменить(СТР,"РУБ.","."); СТР=СтрЗаменить(СТР,"Рублей.","."); СТР=СтрЗаменить(СТР,"РУБЛЕЙ.","."); СТР=СтрЗаменить(СТР,"рублей","."); СТР=СтрЗаменить(СТР,"РУБЛЬ.","."); СТР=СтрЗаменить(СТР,"Рубль","."); СТР=СтрЗаменить(СТР,"рубль","."); СТР=СтрЗаменить(СТР,"РУБЛЯ","."); СТР=СтрЗаменить(СТР,"Рубля","."); СТР=СтрЗаменить(СТР,"рубля","."); СТР=СтрЗаменить(СТР,СИМВ(42),СИМВ(33)); МАНТИССА=0; значение=0; йц=0; коэфф=1; брать=0; брали=0; юц=0; Прибавить=1; Выходить=0; деся=1; Для ю=1 по СтрДлина(СТР) Цикл юю=Сред(СТР,ю,1); Если (СтрЧислоВхождений("0123456789- -.,%='`~:;",юю)=0) И (брали=1) Тогда Выходить=1; КонецЕсли; //Выходим, Если уже взяли число Если (СтрЧислоВхождений("0123456789",юю)>0) Тогда брать=1; брали=1;// Это-цифры (буквы чисел) КонецЕсли; Если СтрЧислоВхождений(" '~`",юю)>0 Тогда брать=0; КонецЕсли; // пробелы и пр. пропускаем_ Если (СтрЧислоВхождений("--",юю)>0) И (брали=0) Тогда коэфф=-1; брать=0; КонецЕсли;//отрицание Если (СтрЧислоВхождений("--,=.:;",юю)>0) И (брали=1) Тогда юю="."; брать=0; Прибавить=-1; КонецЕсли;//десятичный разделитель Если юю="%" Тогда значение=значение/100; Выходить=1; КонецЕсли; Если (брать=1) и (Выходить=0) Тогда йц=Найти("123456789",юю); Если Прибавить=1 Тогда значение=значение*10+йц; Иначе деся=деся*10; значение=значение+йц/деся; КонецЕсли; КонецЕсли; КонецЦикла; Значч=значение*Коэфф; Возврат Значч; КонецФункции // Знач(Стр) |
|||
17
427
11.08.05
✎
17:58
|
фича от 1С - при преобразовании строки в число преобразование выполняется посимвольно до тех пор, пока не кончится строка или не будет встречен символ, отличный от цифры...
"123" = 123 "123В100" = 123 "И123" = 0 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |