Ich habe einen String, der eine Zahl enthält, und ich würde diese Zahl mit 1,28Multiplizieren Sie eine Zeichenfolge in Java
Hier multiplizieren möchten, ist, wie der String zugeordnet ist
String PRICE = dataRecord.get("PRICE");
Ich habe einen String, der eine Zahl enthält, und ich würde diese Zahl mit 1,28Multiplizieren Sie eine Zeichenfolge in Java
Hier multiplizieren möchten, ist, wie der String zugeordnet ist
String PRICE = dataRecord.get("PRICE");
Sie müssen erhalten eine numerische Darstellung der Daten und führen eine Multiplikation darauf durch. Da das Beispiel "Preis" ist, nehme ich an, dass Geld involviert ist und empfehle daher einen Dezimaltyp.
String price = "9.99";
BigDecimal priceDecimal = new BigDecimal(price);
BigDecimal total = priceDecimal.multiply(new BigDecimal("1.28"));
System.out.println(total);
Ein besserer Weg wäre, ein richtiges Objekt mit einem doppelten Feldtyp zu verwenden.
double price = dataRecord.price * 1.28;
Ähnlich wie @ Robs Beispiel, das die gleiche Antwort gibt. Sie entscheiden, was einfacher ist. ;)
double price = 9.99;
double total = price * 1.28;
System.out.printf("%.4f%n", total);
Für Geld empfehle ich die Verwendung von Doppel mit entsprechenden Rundungen.
Was Sie wirklich wollen, ist:
double price = dataRecord.getDouble("PRICE");
Unter der Annahme, dass ein ResultSet datarecord Objekt. In jedem Fall wäre es viel besser, BigDecimals zu verwenden, und wenn PRICE wirklich in einem String-Objekt gespeichert wird, dann nehme ich an, dass Sie dies getan haben, weil Sie das Float-Präzisionsproblem kennen.
Ich hoffe, das ist, was Sie für
String priceAsString = dataRecord.get("PRICE");
double priceAsInt = Double.valueOf(priceAsString).doubleValue();
double multipliedPrice = priceAsInt * 1.28;
suchen Wenn Sie es in einen String nicht konvertieren müssen, nachdem der Wert multipliziert wird nur die letzte Zeile entfernen.
Es ist wahrscheinlich, dass der Preis keine Ganzzahl ist. Wenn Sie ein Double in einen String konvertieren, sollten Sie eine Art von Rundung verwenden, oder Sie können einen Rundungsfehler sehen. –
Vielen Dank für Ihr Feedback. Du hast absolut recht Ich werde meine Antwort korrigieren. Aber mit Rundungsfehler meinst du eine falsch gerundete Zahl natürlich, oder? – OemerA
Konvertieren Sie die Zeichenfolge in ein Double, um die Multiplikation durchzuführen. Double.parseDouble() ist eine Methode, die Sie verwenden könnten. Ich entschied mich dafür, dies in einen try-Block zu packen, falls die Zeichenkette fehlerhaft ist und ein Fehler ausgelöst wird (wenn der Preis aus irgendeinem Grund keine Zahl ist - zB 5.67b oder 8..34).
String price = dataRecord.get("PRICE");
try {
double p = Double.parseDouble(price);
double result = p*1.28;
System.out.println(result);
} catch(NumberFormatException e) { // ERROR HANDLING
System.out.println("Error parsing string: Price is not a number.");
}
Zu Ihrer Information, hier ist die Dokumentation für parseDouble().
public static double parseDouble (String s) wirft Number
Gibt ein neues Doppel auf die durch den angegebenen String repräsentiert Wert initialisiert, wie durch die valueOf Methode der Klasse Doppel ausgeführt.
Ich schlage vor, Sie runden die Antwort ab, um Rundungsfehler zu vermeiden. z.B. printf ("%. 4f% n", Ergebnis); –
Ich schlage auch vor, dass Sie die tatsächliche Ausnahme ausdrucken, anstatt es andernfalls zu verwerfen, Sie sind besser dran, es IMHO nicht zu behandeln. –
Ich habe die Ausnahme in meinem Code behandelt, um der Person, die die Frage gestellt hat, zu demonstrieren, dass parseDouble() möglicherweise einen Fehler auslösen könnte. Es liegt an ihnen, ob sie die Fehlerbehandlung einbeziehen wollen oder nicht. Übrigens danke für den Tipp über die Rundung. Es ist ein guter Punkt. – Charlotte
Fließkomma-Mathematik. Verwenden Sie BigDecimal und Sie müssen die Skalierung auf das Ergebnis einstellen, um die Rundung aufzurufen, da die Skala wahrscheinlich größer ist als das, was Sie wollen.
private static final BigDecimal MULT = new BigDecimal("1.28");
BigDecimal price = new BigDecimal(dataRecord.get("PRICE"));
BigDecimal result = price.multiply(MULT).setScale(2, RoundingMode.HALF_EVEN);
einfache Art und Weise: Sie wie folgt vor Double.ParseInt („Stringname“), wird den doppelten Wert PLS geben einen Kredit, wenn Sie wie die Antwort
Verwenden VERSALIEN Konvention nur für Konstanten reutnr ('final 'Variablen). [Namenskonventionen] (http://www.oracle.com)com/technetwork/java/codeconventions-135099.html # 367) – Crozin