Hallo alle guten Nachmittag, ich habe ein Problem mit meinen Codes und es gibt mir eine harte Zeit, das zu beheben, ich hoffe jemand hilft mir dabei.Zahlen immer aufrunden vb.net
Ich habe 3 Textboxes
sie sind:
GrandTotal.Text
VatAmount.Text
TotalAmount.Text
und 1 NumericUpDown1
, die als Prozent Identifier arbeitet. Hier
ist das Szenario meines Programms ich eine Taste drücken, wird dann eine bestimmte Spalte in meine Datagridview wird die Summe in der GrandTotal.Text
(Hinweis berechnen und übertragen die Zahl wird mit Kommata Anzeige und Dezimalzahlen (Fungiert als Cent)) und dass, nachdem ich NumericUpdown1.Value
drücken werde, Lets sagen, dass ich es 1 Mal und Wert von NumericUpdown1.Value
drücken ist entsprechen 1 Prozent und nach dem Wert ändert zeigen die VatAmount.Text
wie viel ist das 1 Prozent von Die GrandTotal.Text
und TotalAmount.Text
zeigen die Summe von GrandTotal.Text
undan.
Hier Mein Ziel ist es, die Zahlen mit Kommata und 2 Dezimalstellen anzeigen (Acting als Cents)
Hier ist mein Code innerhalb der Textfelder, so dass Zahlen in Kommata und Dezimalstellen angezeigt werden.
Innen GrandTotal.Text
Private Sub grandtotal_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grandtotal.TextChanged
Try
grandtotal.Text = FormatNumber(grandtotal.Text, 2, True, True, True)
Catch
End Try
End Sub
Innen VatAmount.Text
Private Sub VatAmount_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles VatAmount.TextChanged
Try
VatAmount.Text = FormatNumber(VatAmount.Text, 2, True, True, True)
Catch
End Try
End Sub
und Innen TotalAmount.Text
Private Sub totalamount_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles totalamount.TextChanged
Dim dblValue As Decimal = totalamount.Text
totalamount.Text = dblValue.ToString("0,0.00", CultureInfo.InvariantCulture)
End Sub
Und hier ist der Code, der die Berechnung tun, und es ist innen NumericUpDown1.Value
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
Dim input As Double = Decimal.Parse(grandtotal.Text)
Dim inputStringWithCommas As Decimal = input.ToString("0,0.0", CultureInfo.InvariantCulture)
grandtotal.Text = inputStringWithCommas
Dim vat As Double = Double.Parse(grandtotal.Text) * NumericUpDown1.Value * 0.01
VatAmount.Text = vat.ToString()
totalamount.Text = Decimal.Parse(grandtotal.Text) + vat.ToString("0,0.0", CultureInfo.InvariantCulture)
End Sub
Ich hoffe, Sie verstehen meine Erklärung, ich wollte es nur im Detail sein.
Hier ist meine Frage aber vorher, Lassen Sie mich Ihnen eine Beispielausgabe geben.
In meinem Rechner
1. Beispiel
150,001.50 * 1 Prozent (0,01) = 1,500.015
1,500.015 + 150,001.50 = 151,501.51
Aber in meinem Programm ist die Ausgabe wie folgt. :(
Jetzt sehen Sie es, Sie den Unterschied in der Ausgabe sehen kann, ist meine Frage hier Wie kann ich meinen Ausgang gleicht wie das Beispiel in meinem Rechner machen?Proper Kommata und Dezimalstellen (2 Dezimalstellen in TotalAmount.Text
und NO Abrunden Cut nur 2 Dezimalstellen)
Danke für diesen Beitrag lesen und Ihnen wirklich für zukünftige Hilfe danken. Im mit VB.Net
Wenn Sie '150,001.50 * 0.01' scheint die Antwort auf die gleiche Menge an Dezimalstellen gerundet werden, die Sie verwenden. Versuchen Sie alle 'Double' in' Decimal' zu ändern. Dezimal hat im Allgemeinen eine höhere Genauigkeit und soll bei der Währungsberechnung verwendet werden (es minimiert auch die Möglichkeit einer automatischen Rundung). Wenn das nicht funktioniert, benutze immer noch Dezimal, aber versuche stattdessen zu teilen: 'New Dezimal (150,001,50)/New Dezimal (1/0,01)'. –
'Decimal', das zu' Double' bevorzugt wird, wurde Ihnen [gestern] (http://stackoverflow.com/questions/37343901/proper-computation-of-numbers#comment62205678_37343901) in einem doppelten upvoted Kommentar erklärt. Siehe auch [Was jeder Informatiker über Fließkomma-Arithmetik wissen sollte] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Plutonix