Нужно было написать простейший макрос по закрашиванию ячеек, где есть значения после пятого знака после запятой. Опыта в VBA нет, но написал вот что:
Код
Sub pyatznakow()
' pyatznakow Макрос
' Сочетание клавиш: Ctrl+Ы
For Y = 1 To 256
Z = Cells(Y, 1)
U = Fix(Z * 100000)
M = Z * 100000 - U
If M > 0 Then Cells(Y, 1).Interior.Color = 31569
Cells(Y, 2) = U
Cells(Y, 3) = Z * 100000
Cells(Y, 4) = M
Next Y
End Sub
При работе макрос красит лишние ячейки. Например, для числа 1,1 при вычитании из числа (1,1*100000) его собственного округления получается разница 0,000000000014551915228366900000.
Как я понимаю, это некая проблема чисел с плавающей точкой. Существует ли способ её решить?
Пробуйте округлять разницу максимум до 14 знаков, т.к. согласно спецификации именно в 15 значащем знаке чаще всего возникает ошибка. Хотя все равно непонятна цель. Ведь Вы пишите:
Цитата
PetrGG написал: есть значения после пятого знака после запятой
зачем чего-то вычитать? Почему не применить простое сравнение?
Excel неправильно считает. Почему? а потом сами думайте. Я предложил два варианта решения. Один вроде как костыльный, другой более приемлемый, если опираться на озвученную задачу. Хотя уже не уверен, что задача озвучена верно, раз различия в 15-м разряде Вас так волнуют там, где должно было хватить проверки на неравенство с числом с этими самыми 5-ю знаками.... Еще вариант предложил Казанский. И вроде как он должен работать, т.к. различия покажет даже если они были не только в 6-м разряде.
PetrGG написал: где есть значения после пятого знака после запятой.
Значения после пятого знака после (десятичной) запятой есть у всех хранящихся в ячейках Excel чисел, кроме целых и рациональных со знаменателем, равным степени двойки (не превышающим определенного значения).