Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: vbNet. Ошибка при выводе результата Добавлено: 25.08.09 20:28  

Автор вопроса:  Lara
Делаю программу "калькулятор" в vbNet. Все вроде нормально работает, но при умножении константы pi на себя результат выдает 9! Должно ведь быть дробное число! Константу определила - тип Double. Не понимаю... Хелп!
P.S. Если умножаю обычные десятичные дроби, то и результат - вещественное число. Глючит именно pi...

Ответить

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

Номер ответа: 1
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #1
Добавлено: 25.08.09 20:45
Странно:
  1. Math.PI ^ 2

возвращает 9,86960440108936

Ответить

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



ICQ: 214-179-991 

Вопросов: 42
Ответов: 272
 Профиль | | #2 Добавлено: 25.08.09 21:18
Во что возвращает значение, может проблема в том куда возвращает. По идее должно работать всё нормально.

Ответить

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



Вопросов: 2
Ответов: 11
 Профиль | | #3 Добавлено: 25.08.09 21:20
Возвращает в метку значение 9, а не 9,86960440108936
Может какое-то свойство метки отвечает за формат выводимого числа?

Ответить

Номер ответа: 4
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Web-сайт: werti.org
 Профиль | | #4
Добавлено: 25.08.09 21:27
Может сохранить Это Pi в отдельную константу да и все
Может я я чего-то не понимаю...

Ответить

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



Вопросов: 2
Ответов: 11
 Профиль | | #5 Добавлено: 25.08.09 22:02
Да я так и сделала. Вот:
Const pi As Double = 3.14159265358979

Код кнопки "умножить":
Private Sub Proizved_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proizved.Click
        Ravno.Tag = Val(Label1.Text)
        deystvie = "произведение"
        Label1.Text = ""
    End Sub

При нажатии на "равно" с помощью оператора Select Case выбираю нужное действие и
 Select Case deystvie
            Case "сумма"
                Resalt = Ravno.Tag + Val(Label1.Text)
            Case "разность"
                Resalt = Ravno.Tag - Val(Label1.Text)
...
End Select
        Label1.Text = Resalt
Вроде все верно...

Ответить

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



Вопросов: 2
Ответов: 11
 Профиль | | #6 Добавлено: 25.08.09 22:04
Небольшая ошибка. Забыла в операторе Select Case
записать строчку для произведения..
Case "произведение"
                Resalt = Ravno.Tag * Val(Label1.Text)

Ну, в общем и так понятно)))

Ответить

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



Вопросов: 2
Ответов: 11
 Профиль | | #7 Добавлено: 25.08.09 22:07
А как быть с суммой, разностью, возведением в любую степень и т.д.? Работать ведь должно и при обычном pi+pi.... а не работает...

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 25.08.09 22:16
В качестве разделителя дробной части функция Val разпознает только точку! Когда вы записываете число в метку,оно форматируется в зависимости от региональных настроек.. а поскольку у вас наверняка стоит русская локаль, то туда записывается число с запятой и Val при считывании этого числа натыкаясь на запятую тупо отбрасывает дробную часть не считая ее числом.. отсюда вы и получаете результат 9.. Изуйчайте типы данных и приведение к необходиомум типу..

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 25.08.09 22:18
А вообще почаще обращайтесь к документации... rtfm
http://msdn.microsoft.com/ru-ru/library/k7beh1x9.aspx

Ответить

Номер ответа: 10
Автор ответа:
 Lara



Вопросов: 2
Ответов: 11
 Профиль | | #10 Добавлено: 25.08.09 22:21
Неправда ваша, я знаю, что разделитель - это точка! И константу ввожу с точкой. А вот фразу "поскольку у вас наверняка стоит русская локаль, то туда записывается число с запятой " я не поняла. Поясните, пожалуйста....

Ответить

Номер ответа: 11
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Web-сайт: werti.org
 Профиль | | #11
Добавлено: 25.08.09 22:33
Как сказать то ...
ну вот
"Число с запятой" = val("Число с точкой";)

Ответить

Номер ответа: 12
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Web-сайт: werti.org
 Профиль | | #12
Добавлено: 25.08.09 22:35
Видимо EROS говорил(а) про это

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 25.08.09 22:41
Суть этой фразы в том, что вы в каком то месте с числом работаете как со строкой.. и при переводе из числа в строку и обратно теряете дробную часть..
Если вы попробуете выполнить такой код:
  1.  
  2. Const pi As Double = 3.14159265358979
  3. Dim stringValue as String = pi
  4. MsgBox(stringValue )


То скорее всего вы там вместо точки увидите запятую.. И если это так, то при попытке через Val снова сделать число, вы потеряете дробную часть.. (я так думаю)

Ответить

Номер ответа: 14
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #14 Добавлено: 25.08.09 22:45
А вообще я бы рекомендовал вам отказаться от Val и воспользоваться стандартными функциями типа Double.Parse или CDbl что больше вам нравиться... тогда вы наверняка избежите ошибки преобразования..

Ответить

Номер ответа: 15
Автор ответа:
 Lara



Вопросов: 2
Ответов: 11
 Профиль | | #15 Добавлено: 25.08.09 22:47
Если записать строку
3,14159265358979 = Val(3.14159265358979)
то программа сообщает о синтаксической ошибке.

Я поняла, в чем проблема: когда я нажимаю кнопку ввода pi, тот несмотря на то, что константа эта определна с точкой, в текстовое поле число появляется с запятой!!!
Вот только, как решить эту проблему?

Ответить

Страница: 1 | 2 |

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



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