...Кстати, простейший способ получить символ разделения целой и дробной частей – вызвать функцию Format следующим образом
Format$(0, ".")
Этот вызов вернет текущий разделитель целой и дробной частей числа.
Saturn.65 писал(а):Всему виной запятая.
alibek писал(а):Saturn.65 писал(а):Всему виной запятая.
Оперировать числами, используя вместо числовых переменных текстбоксы, это очень самобытно и необычно, но неправильно.
Столь же самобытное решение — задай в настройках использование в качестве десятичного разделителя точки. Именно эта проблема будет решена.
Saturn.65 писал(а):Я понимаю, что где-то неправильно. Тогда бы пример привели и делов то. А где задать в настройках точку? А на другом компе как будет работать?
iGrok писал(а):Saturn.65 писал(а):Я понимаю, что где-то неправильно. Тогда бы пример привели и делов то. А где задать в настройках точку? А на другом компе как будет работать?
На другом компе будет работать, если там тоже будет точка. )
А если запятая - то не будет.
Private Sub Text1_Change()
Pointindex# = InStr(Text1, ",")
If Pointindex# = 0 Then 'есть ли в тексте запятая?
' нет
If IsNumeric(Text1) Then 'можно ли текст преобразовать в число?
Else
End If
Else 'в тексте есть хотя бы одна запятая
'замена первой запятая на точку:
Text1 = Left(Text1, Pointindex# - 1) & "." & Mid(Text1, Pointindex# + 2)
End If
End Sub
public valTxt99 as single 'вот в этой переменной храни результат
valTxt99 = что-то там поделить на чтототам
TextBox99.text=valtxt99
valTxt99 =val(replace(textbox99.text,",",".")))
Кто-нибудь ни сочтет за труд, чтоб показать простенький пример замены запятой в десятичных числах на точку? Ведь это вам раз плюнуть. Я понимаю, что google бесконечное и поиск рулит, но у меня нет времени. Все написано, но уперся в эту запятую...
Private Sub Command1_Click()
iInput = Text1.Text
Text2.Text = Replace(iInput, ",", ".")
End Sub
alibek писал(а):Оперировать числами, используя вместо числовых переменных текстбоксы, это очень самобытно и необычно, но неправильно.
Столь же самобытное решение — задай в настройках использование в качестве десятичного разделителя точки. Именно эта проблема будет решена.
Нет! Для работы с числами есть числовые переменные. Для работы со строками есть строковые переменные. А тексбоксы не нужно использовать ни для того, ни для другого.Saturn.65 писал(а):С другой стороны я же Val ставлю перед текстбоксами. Это разве не тоже самое, что с числами работать?
arthur2 писал(а):Нет! Для работы с числами есть числовые переменные. Для работы со строками есть строковые переменные. А тексбоксы не нужно использовать ни для того, ни для другого.Saturn.65 писал(а):С другой стороны я же Val ставлю перед текстбоксами. Это разве не тоже самое, что с числами работать?
Хакер писал(а):Надо читать MSDN.
Причина в том, что Val всегда преобразовывает свой аргумент в число. Если аргумент не может быть преобразован в число, то возвращается 0. Если в аргументе (в строке) есть символ недопустимый для числа, то Val вернет в качестве результата часть аргумента до недопустимого символа. Если же вместо Val использовать, например, CVal, то в случае наличия недопустимых символов в аргументе, CVal вернет ошибку.Saturn.65 писал(а):Еще не понимаю, что за штука такая? Сперва все работает и вдруг выдает ошибку 13 о несоответствии видов. Ставлю везде Val. Все начинает работать. Успокаиваюсь. Вроде программу дописал и вдруг перестает вычислять. Оказывается надо кое-где убрать Val, хотя я ничего не трогал и 5 минут назад все работало без проблем. Уже и боюсь. Вдруг опять проблемы с этой функцией. В чем может быть причина?
я ничего не трогал и 5 минут назад все работало без проблем
Dim Rast As Single
Dim Norma As Single
Dim NormaZ As Single
Dim Tonn As Single
Tonn = Combo2.Text
Norma = Text7.Text
Rast = Label78.Caption
TonnM = Combo1.Text
pronto писал(а): Если бы Norma имела тип String, то всё было бы корректно. Поэтому, чтобы «выправить» данное «присвоение», то необходимо корректно преобразовать Text7.Text к числу. И здесь мало одной функции Val(), так как числа могут быть дробными. Получается следующий алгоритм решения проблемы.
Поэтому для работы и хранения чисел используй соответствующие типы переменных и/или массивов.
Private Sub Text1_Change()
iInput = Text1.Text
Text1.Text = Replace(iInput, ",", ".")
End Sub
'Вместо
'Label56.Caption = (Rast * Norma) + (((Rast * Tonn) / 100) * 1.3)
'вот так
val56= (Rast * Norma) + (((Rast * Tonn) / 100) * 1.3)
Label56.Caption = val56
Private Sub Command1_Click()
Dim Aaaa As Single
Dim Bbbb As Single
Aaaa = Val(Text1.Text)
Bbbb = Val(Text2.Text)
L1 = Aaaa - Bbbb
Label1.Caption = L1
End Sub
Private Sub Command2_Click()
Dim Aaaa As String
Dim Bbbb As String
Aaaa = Val(Text1.Text)
Bbbb = Val(Text2.Text)
L1 = Aaaa + Bbbb
Label1.Caption = L1
End Sub
Private Sub Command3_Click()
Dim Aaaa As Single
Dim Bbbb As Single
Aaaa = Text1.Text
Bbbb = Text2.Text
L1 = Aaaa - Bbbb
Label1.Caption = L1
End Sub
Saturn.65 писал(а):А есть универсальное средство, которое любые математические действия делает правильно, независимо от региональных настроек запятой или точки? Т.е. любые цифры вставляй, хоть дели, хоть складывай и умножай и будет правильно?
arthur2 писал(а):Command3 позволяет делать операции с разделителем десятичных -запятая, но выдает ошибку 13 при разделении десятичных точкой. Вывод такой, что если используется запятая, то Val ставить не надо. А если точка, то надо.
(обрати внимание - в самом текстбоксе от этого кода запятая никуда не денется, но val сработает правильно)arthur2 писал(а):
- Код: Выделить всё
valTxt99 =val(replace(textbox99.text,",",".")))
Сейчас этот форум просматривают: Google-бот и гости: 70