Страница 1 из 1

В Excel вылезают "хвосты" после запятой

Добавлено: 05 мар 2008, 07:19
sergo_ukr
Проблема в следующем: Из формы ввода в переменную считываются некоторые нецелые числа (типа 1245,15). Они записываются в переменную, для производства некоторого расчета, затем записываются в ячейку. Потом в другой форме это число считывается из ячейки, опять участвует в неких вычислениях, записывается в другую ячейку в другом листе. Ну и т.д.
Так вот, очень часто при этих перемещениях (даже без вычислений) у числа образуется "хвост" - т.е. было 1245,15, стало 1245,1500245364 или 1244,9999912354.
Принудительно применял функцию CSng() - не помогает. Помогает только применение округления после каждого перемещения числа из формы в переменную, из переменной в ячейку, из ячейки в формулу и т.д. Но такой способ изрядно утомляет и увеличивает объем кода.
Можно ли это побороть как-нибудь попроще?

Re: В Excel вылезают "хвосты" после запятой

Добавлено: 05 мар 2008, 11:01
Teslenko_EA
Здравствуйте sergo_ukr.
В каком приложении ?
Тип переменной ?
На каком этапе "...записываются...", "...считывается...", "...участвует в ... вычислениях..." проиисодит изменение данных ?
Евгений.

Re: В Excel вылезают "хвосты" после запятой

Добавлено: 05 мар 2008, 11:56
sergo_ukr
Dim SummaPlat1 As Single, x As Single

'Считывание информации из диалогового окна в переменные
DataPlat1 = CDate(DataPlat.Text)
SummaPlat1 = CSng(SummaPlat.Text)

- здесь все нормально

' Пятая ячейка - Очередной фактический платеж
Worksheets("Фактическое погашение").Cells(l, 5) = SummaPlat1

- Здесь уже вылазит хвост

' суммирование по строчкам в цикле
x = x + Worksheets("Фактическое погашение").Cells(l, 5)

- если в предыдущем выражении сделать округление, то хвост вылазит здесь

Worksheets("База платежей").Cells(k, 4) = x

- здесь тоже хвост вылазит

ну и т.д., т.е практически при каждом использовании числа оно иp числа с двумя знаками после запятой превращается в животное с хвостом :-)

Re: В Excel вылезают "хвосты" после запятой

Добавлено: 05 мар 2008, 13:00
Teslenko_EA
Измените тип данных на Double (#)
Dim SummaPlat1#, x#

SummaPlat1 = CDbl(SummaPlat.Text)