Имя: Пароль:
1C
 
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