![]() |
![]() |
![]() |
|
Определить реальную точность числа - как? | ☑ | ||
---|---|---|---|---|
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С))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |