Нечетное значение, возвращаемое LEN в EXCEL - PullRequest
0 голосов
/ 19 сентября 2018

Рассмотрим, например, следующие строки функций внутри некоторых ячеек:

A1 = B1 - INT(B1)

A2 = LEN(A1)

A2 вернет 17 независимо от значения, возвращаемого функцией (и, следовательно, удерживаемого) в A1.Я подозреваю, что это связано с точностью, возвращаемой INT(B1), но я не знаю достаточно внутренних механизмов Excel для подтверждения.

Конечная цель - получить длину десятичной частичисло, хранящееся в B1.Например, если B1 = 978.01194 , A2 будет содержать 5 (LEN(01194)).Очевидно, что это потребовало бы вычитания 2, чтобы исключить подсчет лидирующих (0.) в моей реализации выше, но это предполагает, что я могу получить надлежащие результаты с помощью этого метода.Будем весьма благодарны за любую помощь или руководство в других методах!

РЕДАКТИРОВАТЬ:

Я понял, что потеря правильной точности происходит только тогда, когда я вычесть две величины.INT(B1) возвращает правильную точность, и используя ее длину, я могу получить десятичную дробь, вычитая из оригинала. Все еще хотел бы знать, что вызывает операцию в A1 для внутренней потери точности для LEN.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Другой альтернативой является FIND, где встречается десятичное число, и используйте его в качестве смещения, например,

= LEN(B1)-FIND(".",B1)

. В общем случае нецелесообразно выполнять математическую операцию над числом, когда вы являетесьдействительно интересует текст , который представляет число по этой точной причине.Плавающие точки не очень надежны для того, чтобы иметь дело с точностью, поэтому в этом случае вы сталкиваетесь с дополнительными конечными числами после десятичной дроби.

0 голосов
/ 19 сентября 2018

В качестве альтернативы можно использовать число, которое не является результатом вычисления:

 = LEN(B1) - LEN( INT(B1) ) - 1

или округлить число до значения, меньшего 15,95 значащих цифр :

 = LEN( ROUND( B1 - INT(B1), 16 - LEN(INT(B1)) ) ) - 2

 = LEN(TEXT(B1,"0.##############")) - LEN(INT(B1)) - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...