Имя: Пароль:
1C
1C 7.7
v7: Непонятка при чтении файла xls
0 zenon46
 
04.03.22
16:45
Доброго дня!
Столкнулся с непонятной проблемой при чтении файла xls, в ячейке xls записано значение 2,3 (число)  в 1С при чтении залетает 2.29999999999999 - как так получается ? И есть еще например 5,1 в xls, прилетает 4.099999999. Может кто сталкивался ?
1 ДаЛадно
 
04.03.22
16:46
Ну округли
2 zenon46
 
04.03.22
17:04
(1) это понятно, что так можно, вопрос почему так происходит, должна же быть причина, да и огульно округлять тоже нельзя, можно вляпаться.
3 Garykom
 
гуру
04.03.22
17:07
4 Garykom
 
гуру
04.03.22
17:08
"В 1С для чисел используется тип данных Decimal. Тип данных decimal может хранить не более 38 разрядов. Причем все значимые, т.е. без потери точности в пределах допустимых значений.
В Excel для дробных чисел использует тип данных float. Тип float сохраняется как четырехбайтовое число одиночной точности с плавающей запятой. Он представляет 32-разрядное значение одиночной точности в формате IEEE 754.Самое большое число, которое может быть представлено типом float, — это 3,4E + 38 (положительные или отрицательные) с точностью около 7 разрядов.
Приблизительные числовые типы данных не хранят точных значений, заданных для многих чисел. Вместо этого они хранят очень хорошее приближение для этих значений. Для многих приложений различие между заданным значением и хранимым приближением несущественно. Однако в некоторых случаях это различие становится ощутимым.
Вот при приведении типов получаются погрешности.
В качестве решения можно попробовать:
В Excel перевести все числа в строку и передавать стройкой, с последующим приведением к числу уже в 1С;"
5 zenon46
 
04.03.22
17:10
(4) спасибо, не знал такого нюанса!
6 Kigo_Kigo
 
04.03.22
17:26
МоеЧисло = Число(СтрЗаменить(МоеЧисло(",",".")))
7 НЕА123
 
04.03.22
17:43
(0)
>в ячейке xls записано значение 2,3 (число)  в 1С при чтении залетает 2.29999999999999
какое значение. залетает через дверь, окно или...
уточнить бы.
8 Злопчинский
 
04.03.22
22:43
(6) не пойдет.
число в виде
23,787,000-23 даст неверно
9 Злопчинский
 
04.03.22
22:56
вот например
"67,051" - в строковой записи - это дробное число или целое с разделителем триад в виде ЗПТ ?
"67,051,234" - это уже можно сказать что целое число с разделителями триад
.
писал как-то относительно недавно преобразование строки в число, бо в экселях как раз вот были такие заморочки.
функция получилась, не идеальная, но почти все отрабатывала