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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
sergo_ukr
Сообщения: 12
Зарегистрирован: 26 сен 2007, 11:05
Откуда: Красноярский край г.Лесосибирск
Контактная информация:

Проблема в следующем: Из формы ввода в переменную считываются некоторые нецелые числа (типа 1245,15). Они записываются в переменную, для производства некоторого расчета, затем записываются в ячейку. Потом в другой форме это число считывается из ячейки, опять участвует в неких вычислениях, записывается в другую ячейку в другом листе. Ну и т.д.
Так вот, очень часто при этих перемещениях (даже без вычислений) у числа образуется "хвост" - т.е. было 1245,15, стало 1245,1500245364 или 1244,9999912354.
Принудительно применял функцию CSng() - не помогает. Помогает только применение округления после каждого перемещения числа из формы в переменную, из переменной в ячейку, из ячейки в формулу и т.д. Но такой способ изрядно утомляет и увеличивает объем кода.
Можно ли это побороть как-нибудь попроще?
sergo_ukr
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте sergo_ukr.
В каком приложении ?
Тип переменной ?
На каком этапе "...записываются...", "...считывается...", "...участвует в ... вычислениях..." проиисодит изменение данных ?
Евгений.
sergo_ukr
Сообщения: 12
Зарегистрирован: 26 сен 2007, 11:05
Откуда: Красноярский край г.Лесосибирск
Контактная информация:

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 числа с двумя знаками после запятой превращается в животное с хвостом :-)
sergo_ukr
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Измените тип данных на Double (#)
Dim SummaPlat1#, x#

SummaPlat1 = CDbl(SummaPlat.Text)
Ответить