Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Операция суммирования чисел в текстовых полях Добавлено: 25.02.09 20:11  

Автор вопроса:  Яр
Доброго времени всем!
Прошу помощи в простом, казалось бы, вопросе.
На форме есть три тестовых поля: Text1, Text2, Text3 и кнопка. Код кнопки:
If Val(Text1.Text) <> Val(Text2.Text) * Val(Text3.Text) Then MsgBox "NO" Else MsgBox "OK"


1. Если вводить выражение: 7,7=7*1,1 (разделяя целую и дробную часть чисел запятыми), то выдает сообщение "ОК". Если ввести то же выражение, но с разделителем - точкой, то выдает "NO".
2. Если далее в те же текстовые поля ввести выражение: 8,4=7*1,2 (разделитель - запятая), то выдает "NO". А если использовать точку, то выдает "ОК".
В чем дело? Подскажите, пожалуйста. Я себе уже голову сломал.
Спасибо!!!

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Dim22



Вопросов: 5
Ответов: 16
 Профиль | | #1 Добавлено: 25.02.09 20:58
В своих прогах я делаю следующее :

в текстовые поля разрешаю вводить пользователям равно как точку, так и запятую, но потом на текстовое поле ставлю обработчик завершения редактирования текстового поля, в котором все запятые заменяются на точки и проверяется число это или нет. После чего Val(string) (или в vbnet - single.parse(string)) без проблем превратит строку в число. Кстати, рекомендуют еще округлять результат до какого-нибудь знака после запятой, т.к. выражение 7*1.1 будет равно не 7.7, а 7.7000000000001, а 7*1.2 не 8.4, а 8.3999999999999999.

Ответить

Номер ответа: 2
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #2 Добавлено: 25.02.09 21:32
Причина фокуса банальна - Val не признает "," как разделитель целой и дробной части ("." ему подавай!), но и не выдаст ошибки, если аргумент вообще не похож на число - просто вернет 0. В данном случае Val("7,7";)=7, т.к. все, что после запятой, по его мнению, числом не является. Соответственно 7=7*1, а 8<>7*1

Ответить

Номер ответа: 3
Автор ответа:
 Яр



Вопросов: 18
Ответов: 24
 Профиль | | #3 Добавлено: 25.02.09 21:37
Поборол заразу!
Вдруг кому-то понадобится. Сравнивать надо не в числовом, а в строковом формате. Вот код для кнопки:
If Text1.Text <> Trim(Str(Val(Text2.Text) * Val(Text3.Text))) Then MsgBox "NO" Else MsgBox "OK"

Всем спасибо!!!

Ответить

Номер ответа: 4
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #4 Добавлено: 25.02.09 21:43
Яр вот чуть переделал твой пример, чтоб ты понял в чём подвох в твоём коде, написал на ВБ нэт - под ВБ6 дкмаю перепишешь.
  1. If Val(TextBox1.Text) <> Val(TextBox2.Text) * Val(TextBox3.Text) Then MsgBox("NO " & Val(TextBox1.Text) & "=" & Val(TextBox2.Text) * Val(TextBox3.Text)) Else MsgBox("OK" & & Val(TextBox1.Text) & "=" & Val(TextBox2.Text) * Val(TextBox3.Text))

Функция Val(Value) служит для преобразования аргумента в числовой тип данных. Функция Val прекращает чтение строки на первом символе, который она не может распознать в качестве части числа.

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 25.02.09 21:44
Да ни фига подобного! Если не поменяешь в текст1 "." на "," , а в остальных наоборот, рано или поздно (скорее рано) снова перекосит!

Ответить

Номер ответа: 6
Автор ответа:
 Aston



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #6 Добавлено: 25.02.09 21:45
Вот е мае ток прочёл, начал писать, обновил а уже 2 ответа есть :)

Ответить

Номер ответа: 7
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #7 Добавлено: 25.02.09 21:46
Прошу прощения, я отвечал на 3 ответ!

Ответить

Номер ответа: 8
Автор ответа:
 Яр



Вопросов: 18
Ответов: 24
 Профиль | | #8 Добавлено: 25.02.09 21:58
Прошу прощения, что не уточнил: во всех текст1, 2 и 3 заставил принудительно менять "," на ".".

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам