kalkulačka   otázka

VB.NET, Algoritmy

Dobrý den, mám ještě jednu otázečku. Na těchto stránkách jsem našel kód kalkulačky. Při dělení nulou píše kalkulačka jako výsledek nekonečno. Nevíte někdo jaká chyba je v tom kódu, popřípadě jak by se to dalo ošetřit ?

 Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim a As Integer = CInt(TextBox1.Text)
        Dim b As Integer = CInt(TextBox2.Text)
        Dim c As Double = a / b
        TextBox3.Text = CStr(c)
    End Sub

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Není to chyba, je to standardní chování v .NET frameworku. Lze to ošetřit následovně:

Select Case c
  Case Double.Infinity ' dělení 1/0 apod.
    TextBox3.Text = "Nelze dělit nulou."
  Case Double.NaN ! dělení 0/0
    TextBox3.Text = "Nelze dělit nulu nulou."
  Case Else
    TextBox3.Text = c.ToString()
End Select
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Porovnávání ke konstantám Infinity a NaN nemusí fungovat vždy, viz. http://www.vbnet.cz/blog-clanek--284-net...

Pro zjištění nekonečna a NaN je nutné použít funkce.

   If Double.IsNaN(c) Then
            Textbox3.text = "Dělení 0/0"
        ElseIf Double.IsInfinity(c) Then
            Textbox3.text = "Dělení nulou"
        Else
            Textbox3.text = c.ToString()
        End If

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Opravdu moc děkuji, moc mi to pomohlo :)

Nevěděl byste ještě prosím jak ošetřit dělení desetinným číslem a naopak?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Keď budete pretypovávať text v textboxe na Double(System.Double), nie na Integer(System.Int32), pôjdu Vám aj desatinné čísla. Alebo ste chce li vedieť, ako z toho spraviť zlomok ?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback