У меня есть этот рабочий лист, где мне нужно создать средство проверки, чтобы определить, является ли число (результат деления суммы двух чисел на другое значение --DIVISOR) целым числом/не имеет десятичных знаков. После запуска указанной программы проверки она в основном работала нормально, но, похоже, обнаружила, что несколько элементов не являются целыми числами, несмотря на то, что они точно кратны DIVISOR.
https://docs.google.com/spreadsheets/d/17-idS5G0kUI7JoHAx3qcJOiJ-zofmMrg93hUvZuxPiA/edit#gid=0
У меня есть два значения (V1 и V2), сумму которых мне нужно разделить на определенное число (делитель).
Мне нужно, чтобы ВЫВОД был целым/целым числом. Поскольку ДЕЛИТЕЛЬ кратен СУММЕ (V1,V2), ВЫВОД должен быть целым числом. Я также расширил количество знаков после запятой, чтобы убедиться, что после запятой нет конечных чисел.
Однако при выполнении функции MOD над ВЫВОДОМ она сгенерировала некоторое бесконечно малое значение.
Я также попытался ОБРЕЗАТЬ ВЫВОД и получить РАЗНИЦУ между ОБРЕЗОМ и ВЫВОДОМ. Это дало то же остаточное значение, что и результат MOD.
Я скачал GSheet и открыл его в MS Excel. Кажется, что с результатом РАЗНИЦА проблем нет, но функция ОСТАТ дала еще одно значение.
образец электронной таблицы не открыт для доступа.
@Ping Спасибо за флаг. Я отредактировал разрешение, чтобы к нему мог получить доступ любой.
@HTNW Спасибо за ответ. Я все еще пытаюсь переварить ваш ответ, поэтому, пожалуйста, поправьте меня, если есть какое-либо неправильное толкование. ПЕРВЫЙ, связанный с конечными бинарными расширениями, я включил другой пример в ссылку выше, где GSheet удалось сгенерировать ожидаемый результат. На моем листе у меня есть 172 строки, над которыми я запустил проверку. Из них только 7 имели бесконечно малые остатки, несмотря на то, что они были в точности кратны ДЕЛИТЕЛЮ. Кажется, я не могу найти какой-либо закономерности в этих 7 случаях.
@HTNW SECOND, не уверен, что это то, что вы имеете в виду, но я использую формат «Число» по умолчанию в GSheet для рассматриваемых ячеек. Я также пытался использовать формат «Финансы», но результаты были такими же. Я попытался погуглить «отметить ячейку как десятичную в GSheet», но я не могу найти никаких подходящих ответов, кроме форматирования чисел, о котором я упоминал выше. ТРЕТЬЕ, к сожалению, округление значений не вариант, так как я ожидаю, что все значения будут кратны определенной константе, чтобы проверить, были ли просчеты или опечатки во входных данных.
@HTNW ЧЕТВЕРТЫЙ (1/2), V1 и V2 в ссылке GSheet на самом деле являются денежными значениями. Константа/делитель (760) – это цена за единицу. Причина разбивки (99% и 1%) заключается в том, что с каждого платежа удерживается сумма, равная 1% от общей суммы комиссии. Следовательно, то, что я на самом деле имею в качестве основного входа, — это 99%. Затем я получаю комиссию за удержание в размере 1% (вторичные данные), используя первичные входные данные. Затем я делю сумму первичных входных и вторичных данных на цену за единицу (760). Таким образом, я могу пометить полученные значения десятичными знаками, поскольку я ожидаю, что они будут целыми числами.
@HTNW ЧЕТВЕРТЫЙ (2/2) Я попытался отдельно обработать часть ЦЕЛОГО ЧИСЛА от части ДЕСЯТИЧНЫХ значений, как было предложено, и фактически исключил бесконечно малый остаток. Однако в контрпримере (с правильными результатами), который я привел в ссылке GSheet, он сгенерировал бесконечно малый остаток с помощью дезагрегированного процесса. Вот скриншот для большей наглядности: imgur.com/a/e104sSb
на самом деле, это не ошибка, и это довольно распространено. его называют «ошибкой» с плавающей запятой, и, в двух словах, он должен делать что-то с тем, как десятичные числа хранятся в листах Google (даже excel или любом другом приложении)
более подробную информацию можно найти здесь: https://en.wikipedia.org/wiki/IEEE_754
чтобы противостоять этому, вам нужно будет ввести округление, например:
=ROUND(SUM(A1:A))
это не идеальное решение для всех случаев, поэтому в зависимости от ваших требований вам может понадобиться использовать их вместо ROUND
:
ROUNDUP
ROUNDDOWN
TRUNC
TEXT
Спасибо за ссылку на Вики. Я так ошеломлен прямо сейчас, что такая простая функция, как ROUND, решила бы мою проблему. На самом деле это было предложено @HTNW, но оно округляло значения до целых чисел. Вместо этого я просто округлю числа до двух-трех знаков после запятой. Я думаю, что это будет работать на данный момент, так как я заметил, что все бесконечно малые значения остатка были равны 10 ^ -11. Большое вам спасибо за вашу помощь.
@qzxrt дополнительные (не-GS) материалы для чтения, если необходимо: stackoverflow.com/questions/21895756 & stackoverflow.com/questions/588004
вау, спасибо, что поделились! это действительно полезные чтения. ваше здоровье!
Ни
983386.8
, ни9933.2
не могут быть представлены в виде конечных двоичных расширений, поэтому большинство программ будут округлять их и вносить некоторую ошибку (за исключением тех программ, которые имеют возможность использовать (намного более медленное) десятичное представление). Есть ли в Google Таблицах возможность пометить ячейку как десятичное значение? Возможно ли округление значений, которые должны быть целыми числами, до целых чисел? Существует ли максимальный знаменатель, на который можно умножать каждое значение (например, если вы работаете с деньгами, можете ли вы работать с целыми числами в центах, а не с дробными числами в долларах)?