Имя: Пароль:
1C
 
Определить реальную точность числа - как?
0 cup of tea
 
07.10.04
11:47
Есть число (очень много чисел) с точкой "примерно где-то посередине", знаков после запятой - "не более 8", реально - наверное меньше. Как оптимально определить максимальное необходимое количество знаков после запятой (чтобы уменьшить разрядность, при этом ничего не потеряв)?
Пока все, что в голову приходит, некрасиво и использует циклы...
1 Волшебник
 
07.10.04
11:49
"чтобы уменьшить разрядность, при этом ничего не потеряв"

Это как?
2 cup of tea
 
07.10.04
11:50
(1) Базу данных хочу реструктуризировать )))
3 Волшебник
 
07.10.04
11:51
(2) Умножь все на 1000. Процесс, обратный деноминации.
4 cup of tea
 
07.10.04
11:53
(3) не пойдет. Там знаков после запятой больше - до восьми может быть.
И почему именно тысяча? В цикле по степеням десятки можно, но некрасиво, тем более что база очень большая.
5 Волшебник
 
07.10.04
11:57
(4) Храни целую и дробную часть в разных реквизитах.
6 cup of tea
 
07.10.04
12:00
(5) Не могу. Это "данность", сложившиеся обстоятельства.
База данных по большому счету вообще отношения к 1С не имеет, просто приходится ее обрабатывать подручными средствами )))
В дальнейшем ее придется хранить тоже именно в теперешнем виде, только с меньшей разрядностью, надеюсь )))
7 Волшебник
 
07.10.04
12:07
(6) Преобразуй все в строки.
8 cup of tea
 
07.10.04
12:08
Кажется, придумала сама.
Строка(0.5000000000)="0.5" - и просто ориентироваться на позицию точки.
форум определенно помогает неторопливой беседой о том, зачем это нужно )))
9 Волшебник
 
07.10.04
12:11
(8) Я, кстати, до сих пор не понял, для чего это все нужно...
10 cup of tea
 
07.10.04
12:16
(9) База данных была изначально в Access и колонка имела разрядность "авто". При попытке принудительно ограничить прямо там - дробная часть теряется почему-то совсем. После импорта в dBaseIV стало почему-то в разных базах 5-8 знаков (по разным колонкам), по характеру данных (рубли и копейки в ценах 1991) определенно должно быть меньше, но пересмотреть все "глазами" определенно нет никакой возможности...
11 Guk
 
07.10.04
12:30
(0) Интересно почему функция Окр не подошла?
И потом, чтобы совсем "ничего не потеряв" при разрядности 8, по-моему не бывает...
12 cup of tea
 
07.10.04
12:36
(11) потому что не знаю, до сколько знаков Окр() и сколько их станет после окр() :))) Окр() вообще-то возвращает результат округления, а не точность.
Если потеря будет состоять в последних пяти нулях - я с этим смирюсь безропотно. Если реальная разрядность 8 только в 1-2 записях, то это скорее всего ошибка и тоже можно исправить безболезненно. Если 8 знаков - закономерность, то придется оставлять все.
13 Guk
 
07.10.04
13:16
(12) Я не знаю, может ты не в курсе, но у Окр есть параметры...
14 cup of tea
 
07.10.04
13:18
(13) в курсе вообще-то.
Интересно все-таки, как ты видишь применение ОКР к решению задачи?
15 France
 
07.10.04
13:38
Надеюсь, что верно понял задачу.
Вот функция, которое возвращает количество знаков после запятой...
____________________________________________
Функция ЗнаковПослеЗапятой(Числ)
   СтрЧисло = СокрЛП(Строка(Числ));
   ДлинаСтр = СтрДлина(СтрЧисло);
   Символ = ".";    
   ПозСимвола = 0;
   ПозСимвола = Найти(СтрЧисло,Символ);
   Если ПозСимвола <>0 Тогда
       Возврат (ДлинаСтр - ПозСимвола);
   КонецЕсли;
Возврат 0;
КонецФункции
16 cup of tea
 
07.10.04
13:41
(15) спасибо. То же самое у меня выглядит теперь так.
Функция Точность(Ном)
Стр=Строка(Ном);
Поз=Найти(Стр,".");
Если Поз=0 Тогда Возврат 0; КонецЕсли;
Возврат СтрДлина(Стр)-Поз;
КонецФункции //Точность
17 Последний Будда
 
07.10.04
13:46
16. Гениально!
18 Последний Будда
 
07.10.04
13:46
+17. для блондинки.
19 Черт
 
07.10.04
13:49
База данных была изначально в Access и колонка имела разрядность "авто". При попытке принудительно ограничить прямо там - дробная часть теряется почему-то совсем. -  а вы не пробовали задавать формат поля, ничего там не теряется проверено
20 cup of tea
 
07.10.04
13:51
(18) Я не блондинка. Признаний гениальности мне не нужно, спасибо.
После пол-ночи работы с агромадными базами (работа срочная и нудная, но оплачиваемая) приходило  голову только "циклическое умножение" на степени десятки... Вопрос закрыт наверное.
21 cup of tea
 
07.10.04
13:53
(19) мне все равно нужно было ее в dBase перенести... Раньше, позже..)))
Хотя ве равно нужно было бы знать, что именно теряешь при форматировании.
22 France
 
07.10.04
13:54
(16)..
Обнуления переменных и всякие условия лишними никогда не бывают..
горький опыт, усвоенный не из 1С)))
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн