Csng и textbox

Программирование на Visual Basic for Applications
Artur KakTus
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 19.02.2004 (Чт) 12:00
Откуда: Ukraine

Csng и textbox

Сообщение Artur KakTus » 24.09.2005 (Сб) 8:38

Здравствуйте,
опять траблы......можеткто подскажет...

Есть текстбокс, на форме. Содержание (т.е. свойство текст), например, имеет значение 1,3.
Для переноса числового значения в ячейку я пользуюсь функцией csng. (range("a1").value=csng(text1.text)) .
В итоге у меня получается на листе значение 1,299999999999999
или не 2,5 а 2,5000000000099949595.
Т.Е. не получается перенос точного значения. Пробывал round.
(range("a1").value=round(csng(text1.text),2)) - тотже результат.
Наоборот все ОК (text1.text=round(range("a1").value,2))

И ГЛАВНОЕ - если ввести ручками 1,3 - все тоже ОК. Может надо дополнительные свойства задавать для текстбокса, у которого значение по умолчанию забито.


//Пользуюсь csng , т.к. надо вводить в форме значения через запятую. Раньше такого не замечал (а может не такие точные расчеты вел). + на некоторых формах все нормально разносится, а может просто совпадение :shock: :shock: :shock:

Спасибо.

2Alibek, если вы смотрите этот пост буду очень признателен за комментарий, т.к. по этой функции (как я понял) вы все можете рассказать. :D
Artur KakTus

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 24.09.2005 (Сб) 9:45

Hasta la vista, baby!

Artur KakTus
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 19.02.2004 (Чт) 12:00
Откуда: Ukraine

Сообщение Artur KakTus » 24.09.2005 (Сб) 12:08

2 Терминатор, спасибо....попробую. Хотя..ссылка на ваш топик не совсем дает ответ на мой вопрос. .по идее можно без лишних усилий (не используя IsNumeric, СDbl) нести в ячейки дробные числа (повторяю, у меня разделителем является - ЗАПЯТАЯ), поэтому - Csng должно работать.
И эта функция работает, ТОЛЬКО не ПОЙМУ почему из моего текстбокса переносится не 1,35 (эта цифра у меня забита в свойствах текстбокса) а 1,350000023332 или 1,3499999747674786868686883 и т.д. (2,5 - 2,5000032233328728).
Т.е. дробная часть в последних знаках странно глючит. ПОВТОРЮ - если ручками забить 1,35 - все ОК :?

ЕСЛИ ЕСТЬ ЕЩЕ СОВЕТЫ, ПОЖАЛУЙСТА. ПОДСКАЖИТЕ.

------------------
п/с - 2Терминатор - по идее, ошибку с СDbl (когда пустой текстбокс) ТЫ МОЖЕШЬ погасить, написав хотябы :
on error resume next
(конечно событие ченж можешь обрабатывать по разному, всякие проверки. но когда будешь нести в ячейки (например после нажатия кнопки) on error resume next должно погасить ошибку. Только я не знаю, какое значение попадет. скорее всего останется прежнее. Поэтому лучше в свойствах текстбокса ставь 0 и тогда проблем не возникнет. Единственный минус - при активации формы, в текстбоксе (с начальным индексом ) курсор будет становится после ноля. Если надо, могу скинуть небольшой код, который вставишь в событие активейт для формы и текст в текстбоксе (с начальным индексом)будет выделятся и можно сразу заносить данные.
Artur KakTus

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.09.2005 (Вс) 9:49

Поскольку все расчеты в компе ведутся на двоичной основе, то в общем случае невозможно добиться исключения таких ситуаций. Самый простой способ избавиться от лишних знаков -- вести вычисления с большей точностью, чем нужно, а затем округлять до требуемой точности. Т.е. Value = Fix(100*CDbl(TextValue))/100.

Если от проблемы нужно избавиться только в Excel, то самый простой способ -- задать в настройках параметр "Точность как на экране" и указывать в формате ячейки требуемый вид числа.
Lasciate ogni speranza, voi ch'entrate.

Artur KakTus
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 19.02.2004 (Чт) 12:00
Откуда: Ukraine

Сообщение Artur KakTus » 26.09.2005 (Пн) 10:28

2Alibek , спасибо за совет попробую. Хотя так не хотелось нагружать код дополнительными функциями, т.к. надеялся что простой ввод и перенос в ексель данных намного проще.
Спасибо.
Artur KakTus


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 16

    TopList  
cron