Имя: Пароль:
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" - это уже можно сказать что целое число с разделителями триад
.
писал как-то относительно недавно преобразование строки в число, бо в экселях как раз вот были такие заморочки.
функция получилась, не идеальная, но почти все отрабатывала
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший