Странный и неправильный результат формул Excel?

Я хочу получить длину результата формулы, но он возвращается неправильно.

Например, я ставлю 1005 в ячейку A1, вставляю формулу =(A1/1000-FLOOR(A1/1000,1))*1000 в B1 и получается 5, это правильно. Но когда я помещаю формулу =LEN(B1) в ячейку C1, получается 16? Хуже того, формула =REPT(0,3-LEN(TEXT(B1,"0")))&(B1) или =REPT(0,3-LEN(TEXT((A1/1000-FLOOR(A1/1000,1))*1000,"0")))&((A1/1000-FLOOR(A1/1000,1))*1000) возвращает 004.99999999999989??🤔

Ошибка с плавающей запятой :-) Подробнее здесь и здесь.

BigBen 18.12.2020 06:32

Этот вопрос не ясен. Вы хотите получить длину текста, возвращаемого вычислением формулы? Если да, то не сделают ли это функции ДЛСТР и ТЕКСТ?

Mark Fernandes 18.12.2020 13:30

округлить результат.. прежде чем получить длину. ( :

p._phidot_ 18.12.2020 19:12

@MarkFernandes Поскольку 5 находится в камере B1, мне просто интересно узнать, почему =LEN(B1) возвращается 16...

TRX 21.12.2020 08:04

@TRX: я тоже не знаю, почему. Возможно, функция LEN пытается вычислить длину текста формулы, а не результат. Если функция LEN ошибочно работает в предположении о 2-байтовой кодировке Unicode, тогда как на самом деле используется 1-байтовая кодировка ASCII, то это может объяснить возвращаемое значение 16 [половина 32, 32 является символом формулы длина).

Mark Fernandes 23.12.2020 09:56
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
5
639
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Причина, по которой =LEN(B1) возвращает 16, заключается в том, что значение в ячейке B1 может отображаться как 5, но на самом деле оно хранится внутри как 4.99999999999989 — и это число содержит 16 символов, когда LEN() оценивается как строка.

Вы можете убедиться в этом сами, многократно нажимая на кнопку «Увеличить десятичную дробь»:

Здесь на дисплее в конечном итоге достаточно десятичных знаков, чтобы отразить базовое значение (функция LEN игнорирует конечные нули — опять же, это нули отображения, а не сохраненные нули).

Вы также можете увидеть то же самое, если просто введете в ячейку следующую формулу:

=1.005-1

На самом деле в нем 19 символов, а не 16, потому что мы не умножали на 1000:

0.00499999999999989

Потеря точности отображаемого 5 до фактического сохраненного 4.99999999999989 действительно происходит из-за того, как работает математика с плавающей запятой, как упоминал BigBen.

См. также Математика с плавающей точкой не работает? для более широкого обсуждения.

Другие вопросы по теме