Имя: Пароль:
1C
1С v8
Загрузка из exel неправильная дробная часть
0 Михаил Луппов
 
28.04.14
17:47
Добрый день. Возник вопрос по загрузке из Exel.  При чтении из файла неправильно читает цифру после запятой должно быть 8.2, а получаю 8.1999999999999. Соответственно следующее число вместо 8.3 получаю 8.3000000000001. При этом до этой цифры и после ошибка возникает в произвольном порядке. Заранее спасибо.
Сетевая 1С:Предприятие 8.2 (8.2.17.169)
1 vicof
 
28.04.14
17:50
Это святые цифры для 1С. Ими нельзя просто так воспользоваться в богомерзком экселе.
2 Wobland
 
28.04.14
17:50
а на здоровье. давай свой вопрос
3 Wobland
 
28.04.14
17:51
(1) подавился пивом
4 Мыш
 
28.04.14
17:52
(0) Это не только для экселя. Из другой базы 1С то же самое будет.
5 vicof
 
28.04.14
17:52
(3) Похлопать?
6 Wobland
 
28.04.14
17:53
(5) браво! бис!
7 Мыш
 
28.04.14
17:53
Надо просто запомнить. Для всех дробных чисел в обязательном порядке использовать Окр()
8 mdocs
 
28.04.14
17:57
Что в экселе хранится, то ты и получаешь. Бери не Value, а Text если надо загружать так как показывает эксель.
9 Мыш
 
28.04.14
17:59
(8) Борис, ты не прав. Это особенности передачи чисел через COM.

>> Помните, что не все десятичные числа имеют двоичное представление с плавающей запятой. Например, число «0,2» будет представлено как «0,200000003» в одинарной точности.
10 Михаил Луппов
 
28.04.14
18:05
Спасибо за ответы пока грешу на глюки компоненты exel до этого год вопросов не возникало.
11 Мыш
 
28.04.14
18:09
(10) Ни эксель ни 1С не при делах. Числа преобразуются при передаче. Потому на некоторых значениях такой результат.
12 Kookish
 
28.04.14
18:32
Применение операции == для вещественных чисел. Новички, объяснять все причины долго, так что запомните как аксиому: операцию == можно применять только к целым числам, а вещественные всегда сравниваются путём вычисления их разницы и проверки, что она по модулю меньше определённого порога.
13 Мыш
 
28.04.14
18:38
(12) Простите, где в 1С применяется операция "==" ?
14 Torquader
 
28.04.14
19:39
(0) А куда вы эти значения пишете ? Если в реквизиты документа, то система автоматом выполнит округление, и вы ничего не заметите.
P.S. передача данных по OLE идёт через тип double - можно про него почитать, чтобы понять, как он хранит дробные числа.
15 Михаил Луппов
 
29.04.14
09:49
Всем спасибо помогла замена Value на Text. В колонке хранились переменные типа строка.