В ячейке excel записано значение 5,39 и отформатировано число 2 знака после ,
xl.Cells(row,7).Value = 5,38999999999
при этом если поменять значение на 4,39 та же картина а вот если на 0,39 то всё норм ну или 5,29 тоже норм.
---
Из за того, что вещественные числа в экселе - это числа с плавающей запятой, то есть число хранится в форме мантиссы и показателя степени двойки. https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%­D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF­%D1%8F%D1%82%D0%BE%D0%B9
---
а когда глазками смотришь, то эксель тебе показывает не валуе а текст:
xl.Cells(row,7).Text= 5,39
---
а когда глазками смотришь, то эксель тебе показывает не валуе а текст:
xl.Cells(row,7).Text= 5,39

так точно если xl.Cells(row,7).Text= 5,39
Но я файл новый создавал и вручную забивал данные т.к. тоже копал в эту сторону.
---
вот и разобрались!
Value это то что там на самом деле.
Text это то что вы видите как человек в мониторе.
---
А происходит это как писал Slava Kron "из-за того, что вещественные числа в экселе - это числа с плавающей запятой, то есть число хранится в форме мантиссы и показателя степени двойки" . Как я понимаю это и есть причина такого расхождения.
---
нет, причина этому в том что у таких чисел задан формат по умолчанию, о котором говрится. А вот вы можете самостоятельно представление изменить в экселе и тогда до вас дойдет дзен=))
---
Вот так сюрприз. А я уже думал что всё порешали.
Погодите поторопился. Так Вы считаете что причина не в том "что вещественные числа в экселе - это числа с плавающей запятой, то есть число хранится в форме мантиссы и показателя степени двойки". То что я меняю представление чисел в экселе изменяя формат - я понимаю, но не совсем могу понять, как это может повлиять на мою ситуацию. Вы имеете в виду что можно задать такой формат что можно будет видеть число в экселе изначально в виде 5,3899999?
---
смотри картинку во вложении. При 10 знаках идет округление, при 11 будет в тексте, то что и в значении!
---
Да но при этом в значении excel отображает истинное значение а не .text (смотрите вложение)
А в моём случае excel отображал и имел значение 5.39. А при получении этого числа в 1С я имел значение 5.38999999.
Т.е. как я понял в excel число 5,39 хранится в форме мантиссы и показателя степени двойки ((1,39 / 4) * (2^23)). А при передаче в 1С оно преобразуется обратно, и мы получаем 5,389999866485595703125. Как-то так и да при первом же округлении этого числа даже до 6 знаков после запятой мы тут же получаем 5,39. Возможно я неправильно понял. Поправьте меня пожалуйста если так.
---
смотрите картинку внимательно! А то Остапа понесло! Игра называется найди 10 отличий))
---
Послушайте Максим. Если Я чего-то неправильно понял и Вы всё же правда мне хотите помочь то я Вас прошу. Укажи те на то место где я всё же не правильно понял причину данного преобразования при получении числа с excel. Получив сообщение с форматированием от Вас, я не только посмотрел я ещё и попробовал обыграть такую же ситуацию в excel. Но больше убедился в правоте Slava Kron. Т.к. у меня в значении всегда отображалось 5,39 и ничего больше и я говорю сейчас не о ячейке где можно применить форматирование и получить разные варианты а о строке формул где выводится реальное значение ячейки. Это видно в последней картинке. Т.е. я в ячейке имею значение 5,39 и никакого другого. Но передается оно как 5,3899999. И форматирование никак не влияет на это в моём случае. Так куда я должен посмотреть что бы осознать что я не понял Вас правильно? Можете мне пояснить как Остапу ;). Дабы меня опять не унесло в неверном направлении )))
---
в (19) все написано и показано! Читайте перед сном может поймете.
---
Сообщение было скрыто модератором.
---
Из за того, что вещественные числа в экселе - это числа с плавающей запятой, то есть число хранится в форме мантиссы и показателя степени двойки. https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D1%81_%D0%BF%D0%BB%­D0%B0%D0%B2%D0%B0%D1%8E%D1%89%D0%B5%D0%B9_%D0%B7%D0%B0%D0%BF­%D1%8F%D1%82%D0%BE%D0%B9
---
Спасибо. Буду читать
---
Не знал этих вещей. Не то образование )
Но прочитав так и не смог осилить почему же 5,39 или 4.39 преобразует в *,389999 а вот уже 3,39 в 3,39? ведь как я понимаю ведь мантисса 5,39?
---
Ок, давайте разложим 5.39 на мантиссу и порядок для числа одинарной точности (32 бит / Float / single):
Сначала найдём какое максимальное (2^х) умещается в нашем числе. Для 5.39 - это 4.
В мантиссе у нас зашифрован как бы остаток от (5.39 - 4). Это 1.39. Чтобы узнать чему равна мантисса в десятичной с/с, надо наш нормализованный остаток умножить на 2^23. нормализованный остаток = 1,39 / 4.
Мантисса = (1,39 / 4) * (2^23) = 2915041,28. Округлённо = 2915041.

Так вот в памяти хранятся только знак числа, экспонента и мантисса, а когда нужно вернуть его представление, получаем:
2915041 / 2^23 * 4 + 4 = 5,389999866485595703125
Калькулятор в помощь http://www.binaryconvert.com/convert_float.html
Другой вопрос, почему, например, 3,39 отображается нормально. Предположу, что после вычисления приближенного значения происходит округление до определенного знака и для 3.9 приближенное значение ближе к оригиналу, чем для 5.39
---
Спасибо за помощь уже гораздо понятнее. И если пользоваться этим калькулятором то можно заметить что
5,39 = 5.389999866485595703125E0
4,39 = 4.389999866485595703125E0
3,39 = 3.3900001049041748046875E0

хотя у меня 5,39 = 5,38999999999999
Тоже немного не сходится
---
Значит у вас double числа (64 бит), http://www.binaryconvert.com/convert_double.html
---
```1c
    s = 0
    For i = 0 To 100
    s = s + 0.01
    Debug.Print s
    Next
```

К этому надо привыкнуть или использовать языки программирования с более точной математикой.
---
Странно что это происходит на 5.39 и 4.39 а вот с 3.39 или 0.39 уже не происходит
---
в экселе формула какая-то и реальное значение то что загрузили. Визуально показывает другое значение, такое бывает, например с датами!
---
Может определить формат колонки ("число" и количество десятичных знаков) и настроить точность как на экране?
---
Мне правда интересно как так? Колонка числом и была, только количество знаков после запятой не указывал. Сначала поставил 5 знаков после запятой и получил внимание 5,39000. Попробовал и 2 знака тоже 5,39. Хотя UsedRange.Cells(row,7).Value = 5.38999999999999. Результат округления. Если ставить 15 знаков после запятой то 5.38999999999999 )))