Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295

Почему округляет?

29.06.2011, 08:52. Показов 2075. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вводит в TextBox1 чило 123 в TextBox2 показывает 12. Почему так?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class Form1
    Dim a As Char
    Dim FP As Double
    Public Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        a = e.KeyChar
        If Char.IsDigit(a) Or Char.IsPunctuation(a) Then
            If Char.IsPunctuation(a) Then
                If sender.text.contains(",") Then
                    e.Handled = True
                Else
                    e.KeyChar = Chr(44)
                End If
            End If
        ElseIf Asc(a) = 8 Then
        Else
            e.Handled = True
        End If
        FP = Val(TextBox1.Text)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox2.Text = FP
    End Sub
End Class
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.06.2011, 08:52
Ответы с готовыми решениями:

Почему программа округляет ?
Вот код для подсчёта среднеарифметического числа 7 цифр Почему он среднее округляет до целых ? #include <stdio.h> ...

Почему-то не округляет до десятых?
Добрый день всем! У меня программа должна конвертировать Фаренгейты в С и при этом округлять результат до десятых. Но почему -то...

Подскажите почему округляет
Почему выдаёт 103.34 (нужно 103.3399) подскажите #include <iostream> using namespace std; int main() { double n; ...

17
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 09:42
Дело вовсе не в округлении, а в том, что присвоение переменной значения бокса происходит ДО ТОГО как в нем что-то появилось. Поэтому выходное значение будет всегда на один символ короче.
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 09:47  [ТС]
Не понял,можно поподробнее?
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 09:54
TextBox1_KeyPress
Ты давишь на клавишу "А"...
Код срабатывает, но текстбокс пока пуст.
Переменная ничему не равна.
Это событие заканчивается, и только потом в боксе появляется твоя "А".
А переменная то уже присвоена, и там ничего.
В текстбокс символы печатаются ПОЗЖЕ, чем идет присвоение переменной
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 10:03  [ТС]
Значит все дело в KeyPress
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 10:53
GRURUS, именно
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 11:26  [ТС]
но если я меняю событие то программа вообще отказывается работать
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 11:29
GRURUS, тут дело хозяйское, ты для чего клавиши-то ловишь?
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 11:56  [ТС]
чтобы вводить только числа, и если пользователь вводит точку то ее заменять на запятую
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 12:07
GRURUS, Ты снова очень невнимательный. В предыдущей теме я решил твой вопрос, а ты опять клавиши ловишь.
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 12:16  [ТС]
Памирыч, вот этот код с предыдущей темы, он переводит в денежный формат и меняет точку на запятую, но и при этом разраешает вводить буквы и т.д
VB.NET
1
2
3
4
5
6
7
8
Public Sub TextBox4_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox4.LostFocus
        TextBox4.Text = TextBox4.Text.Replace(".", ",")
        If IsNumeric(TextBox4.Text) = True And TextBox4.Text <> "" Then
            Valuta = TextBox4.Text
            TextBox4.Text = String.Format("{0:c}", Valuta)
        End If
        COB = Val(Valuta)
    End Sub
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 12:28
GRURUS, навскидку:
используй старый свой код, но в переменную пиши не в этой процедуре, а при рассчетах
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 12:33  [ТС]
проще однако не замарачиваться, а то весь мозг сломал

Добавлено через 5 минут
FP = Val(TextBox1.Text) вывел я из этой процедуры все равно отбрасывает числа
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 12:46
GRURUS, покажи код
0
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 12:53  [ТС]
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim a As Char
Dim FP, CSD, COB, CPI As Double
Public Sub TextBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
        a = e.KeyChar
        If Char.IsDigit(a) Or Char.IsPunctuation(a) Then
            If Char.IsPunctuation(a) Then
                If sender.text.contains(",") Then
                    e.Handled = True
                Else
                    e.KeyChar = Chr(44)
                End If
            End If
        ElseIf Asc(a) = 8 Then
        Else
            e.Handled = True
        End If
End Sub
Public Sub РассчитатьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles РассчитатьToolStripMenuItem.Click
        FP = Val(TextBox2.Text)
CO = Math.Round(FP * (CSD + COB + CPI), 2)
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
29.06.2011, 13:02
GRURUS, 123 пишу, 123 и получается, ничего там не отбрасывается.
Если ты говоришь про то что после запятой отбрасывает, то используй не Val, а CDbl
1
9 / 9 / 4
Регистрация: 27.06.2011
Сообщений: 295
29.06.2011, 13:27  [ТС]
Памирыч, если не ты, мозг ломал бы долго
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
29.06.2011, 17:16
обрабатывай textChanged и вот там делай проверку введенного символа
VB.NET
1
2
3
4
5
6
7
8
Sub IsNum(ByVal text As String, ByVal ctl As Object)
        On Error Resume Next
        If IsNumeric(text) = False Then
            ctl.Text = text.Remove(text.Length - 1, 1)
            ctl.SelectionStart = ctl.Text.Length
            ctl.SelectionLength = 0
        End If
    End Sub
использование
VB.NET
1
2
3
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        IsNum(sender.Text, sender)
    End Sub
если после ввода символа получилось не число, то последний символ удалится, а курсов будет стоять в конце оставшейся строки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2011, 17:16
Помогаю со студенческими работами здесь

Почему то округляет поле
Есть таблица, а в ней поле &quot;Оборотка real null&quot; Так вот вношу в это поле значение, а оно округляется до 2 знаков после запятой. Не могу...

Почему round не округляет?
acc=658.483764619061 round(acc,2) print(acc) 658.483764619061

В первом варианте не округляет до целого числа, а во втором случае округляет
Добрый Вечер Программисты. Подскажите пожалуйста почему в первом варианте не округляет до целого числа,а во втором случае округляет,и как...

Почему Access округляет дроби?
Дорогие форумчане, подскажите плиз, в чем причина и как ее ликвидировать - тип поля Числовой, формат поля - С разделителями разрядов, число...

Почему программа округляет значение переменной?
Почему программа округляет значение переменной p? Как это исправить? IDE: CODE::BLOCKS 16.01


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru