Маска числа

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Artur KakTus
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 19.02.2004 (Чт) 12:00
Откуда: Ukraine

Маска числа

Сообщение Artur KakTus » 20.09.2004 (Пн) 12:05

Здравствуйте, простите за глупый вопрос, но как задать в текстбоксе маску числа. У меня дробное число выводится через запятую, а мне нужно через точку. (я иногда использую для расчетов значения тектбоксов, а с помощью val можно захватить только целую часть, а то что после запятой игнорируется (если не стоит точка разделитель)).
Подскажите как мне задать разделитель дробного числа не запятой, а точкой. А может есть функция, которая по подобию Val захватит полностью число (только с запятой, отделяющей дробную часть)
Artur KakTus

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

Сообщение alibek » 20.09.2004 (Пн) 13:20

CSng.
А еще лучше, иди в "Региональные настройки" в панели управления и задай точку в качестве разделителя.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Artur KakTus » 20.09.2004 (Пн) 13:51

Спасибо Alibek. Точку разделитель в региональных настройках найти не смог, а вот CSng помогло. Именно так как я хотел. Спасибо тебе за то, что уже не первый раз даешь мне дельные советы. :D :D
Artur KakTus

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 20.09.2004 (Пн) 14:29

Извините, но у меня та же проблема!
Что именно делает CSng?

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

Сообщение alibek » 20.09.2004 (Пн) 14:45

CInt, CLng, CSng, CDbl, CCur переводят из строки в число в соответствии с региональными настройками (разделителем дробной и целой части и т.п.). Format$ переводит из числа в строку в соответствии с указанным форматом и региональными настройками.
Val и Str$ всегда используют фиксированный формат чисел (нет ведущего нуля, разделитель -- десятичная точка, разделителей групп нет).
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Artur KakTus » 20.09.2004 (Пн) 14:52

2 Raros. Как Вы выдели из моего вопроса, обычная функция VAL возвращает число, находящиеся в текстбоксе (а не строку). Но при работе с дробніми числами VAL распознает число только до запятой (после как я понимаю для этой функции идет строка), что не всегда удобно, т.к. возникает погрешность вычислений. (Однако если ввести дробное число через точку, то ВАЛ без проблем возвращант дробное число). Особенно если значение текстбокса вычисляется самой программой (VB отображает дробное число через запятую), а потом снова используется в расчетах мы теряем дробную часть. Чтобы нормально использовать дробное значение (написанное через запятую) нужно (по совету Алибека) использовать функцию CSng следующим сспособом:
CSng(drobtext.textbox)
Это позволяет сохранить точность вычислений
Artur KakTus

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 20.09.2004 (Пн) 16:44

Спасибо большое!

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 20.09.2004 (Пн) 16:47

Обьясните пожалуйста, что такое ведущий ноль?

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

Сообщение alibek » 20.09.2004 (Пн) 16:51

0.7 - с ведущим нулем
.7 - без ведущего нуля
Lasciate ogni speranza, voi ch'entrate.

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 20.09.2004 (Пн) 17:15

Где они применяются и в чём существенная разница между ними?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.09.2004 (Пн) 17:27

Да нет никакой разницы, в России принято с нулём писать, а в США - без, вот и всё.
Изображение

raros
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 09.09.2004 (Чт) 17:25

Сообщение raros » 21.09.2004 (Вт) 9:04

Понятно! Спасибо!

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 03.10.2004 (Вс) 16:04

А вот так можно контролировать ввод в массив элементов к тому же ))

Private Sub txtCeny_Change(Index As Integer)
Static oldText(0 To 100) As String
Dim i As Integer
For i = 1 To Len(txtCeny(Index).Text)
If InStr("0123456789.", Mid(txtCeny(Index).Text, i, 1)) = 0 Then
MsgBox "Напишите арабскими цифрами с точкой"
txtCeny(Index).Text = oldText(Index)
End If
Next i
If Val(txtCeny(Index).Text) > 9999 Then
MsgBox "Ïî-ìîåìó ÷èñëî ñëèøêîì áîëüøîå!"
txtCeny(Index).Text = oldText(Index)
Else
oldText(Index) = txtCeny(Index).Text
End If

End Sub
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Prickly
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 07.10.2004 (Чт) 18:44
Откуда: From Russia

Сообщение Prickly » 07.10.2004 (Чт) 22:33

А лучше вот так:

Код: Выделить всё

Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Df(KeyAscii)
End Sub

Private Function Df(theParam As Integer)
  If InStr("1234567890." & Chr(8), Chr(theParam)) > 0 Then
    Df = theParam
  Else
    Df = 0
  End If
End Function


Вернуться в Visual Basic 1–6

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

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

    TopList  
cron