Webanwendung für OnlineGame, verzweifle an der Mathematik :(

sinni800

Mitglied
Also... Da gibts so ein Online Game, dort gibt es vier Währungen...

Gold, Silber, Kupfer, Zinn

100 Zinn sind 1 Kupfer, und so weiter!

Ich soll eine Art Kassenbuch entwickeln, so weit so gut, er trägt es in die Datenbank richtig ein!

Code:
    Protected Sub FormView1_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewInsertEventArgs) Handles FormView1.ItemInserting
        'Response.Write(CType(FormView1.FindControl("G"), TextBox).Text)

        'e.Values(3)
        CType(FormView1.FindControl("MengeTextBox"), TextBox).Text = (Convert.ToUInt32((getUI("G") * 1000000) + (getUI("S") * 10000) + (getUI("K") * 100) + (getUI("Z")))).ToString
        e.Values(2) = (Convert.ToUInt32((getUI("G") * 1000000) + (getUI("S") * 10000) + (getUI("K") * 100) + (getUI("Z")))).ToString

        Dim Einnahme As Boolean = CType(FormView1.FindControl("chk_Einnahme"), CheckBox).Checked
        If Einnahme = False Then
            Dim x As Integer = Convert.ToInt32(CType(FormView1.FindControl("MengeTextBox"), TextBox).Text)
            x = x * (-1)
            CType(FormView1.FindControl("MengeTextBox"), TextBox).Text = x.ToString
            e.Values(2) = x.ToString
        End If
    End Sub


    Function getUI(ByVal s As String) As Integer
        Try
            Return Convert.ToInt32(CType(FormView1.FindControl(s), TextBox).Text)

        Catch ex As Exception
            Response.Write(ex.Message)
            Response.Write("<br /> TEXT: " + CType(FormView1.FindControl(s), TextBox).Text)
        End Try
    End Function

Er wandelt alles in die kleinste Währung um, und schiebt die in die Datenbank.

Jetzt muss das natürlich auch in einzelne Währungen angezeigt werden! Und da liegt mein Problem, wie mach ich das?

Bei 1 000 000 Zinn sinds ja
1 Gold, 00 Silber, 00 Kupfer, 00 Zinn...

Habs so versucht:

Code:
    Protected Sub GridView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.DataBound
        Dim d As GridViewRowCollection
        d = GridView1.Rows
        Dim f As GridViewRow

        For Each f In d
            Dim wert As Int64 = f.Cells(4).Text
            f.Cells(4).Text = ""
            append(f.Cells(4), "<img src=w/gold.png /> " + Convert.ToInt32(wert / 1000000).ToString)
            append(f.Cells(4), "<img src=w/silber.png /> " + Convert.ToInt32(wert / 10000 - Convert.ToInt32(wert / 1000000) * 100).ToString)
            append(f.Cells(4), "<img src=w/kupfer.png /> " + Convert.ToInt32(wert / 100 - Convert.ToInt32(wert / 1000000) * 100 - Convert.ToInt32(wert / 10000) * 100).ToString)
            append(f.Cells(4), "<img src=w/zinn.png /> " + Convert.ToInt32(wert - Convert.ToInt32(wert / 1000000) * 100 - Convert.ToInt32(wert / 10000) * 100 - Convert.ToInt32(wert / 100) * 100).ToString())

        Next
    End Sub

    Sub append(ByRef cell As TableCell, ByVal content As String)
        cell.Text = cell.Text + content
    End Sub

Funktioniert aber nur bis Silber, wenn überhaupt..

Krieg ich das irgendwie besser hin? Den Integer könnte ich doch auch in der Theorie parsen, nur wie? Und wie geh ich da mit allen Möglichkeiten um?
 
Ich denke das der Modulo-Operator dich weiter bringt, einfach mal nach :google:n - dieser liefert dir den Rest aus einer Division:

Code:
3202000 % 1000000 = 202000
 
Also habs probiert, hab jetz bissle rumprobier und

Code:
            append(f.Cells(4), "   <img src=w/gold.png /> " + (1000000 \ wert).ToString())

            append(f.Cells(4), "<img src=w/silber.png /> " + (10000\(wert Mod 1000000)).ToString)
            append(f.Cells(4), "<img src=w/kupfer.png /> " + (wert Mod 10000 \ 100).ToString)
            append(f.Cells(4), "<img src=w/zinn.png /> " + (wert Mod 100).ToString)
zusammengereimt

Ging aber nich so wie ichs mir dachte, inklusive cannot divide by zero fehler.

EDIT: Habs jetz mehr oder weniger hingebracht, der rechnet richtig, mit MOD ging das ganz gut, erledigt.
 
Zuletzt bearbeitet:
Zurück