Warum gibt es so viele Zahlen aus? Wie kann ich das vermeiden? Ich möchte nur, dass es 135,69 ausgibt.
Sie sicher Art von currency ist Schnur? Und Sie lesen den Wert nur als Zeichenfolge?
– Rohit Jain
28. Februar 2015 um 16:21 Uhr
mögliches Duplikat von Bestimmte Genauigkeit eines BigDecimal festlegen
– Robert Moskal
28. Februar 2015 um 16:21 Uhr
Ihre Währung ist nicht einmal eine String beginnen mit; benutze einfach die BigDecimal Konstrukteur mit a String als Argument.
– fg
28. Februar 2015 um 16:24 Uhr
Es könnte viele Lösungen geben, aber wissen Sie, warum es passiert? Lesen Sie dies, wenn Sie dies nicht tun: effbot.org/pyfaq/…
– Cem Kalyoncu
28. Februar 2015 um 17:32 Uhr
Marlon Patrick
Der BigDecimal(double)-Konstruktor kann unvorhersehbares Verhalten aufweisen. Verwenden Sie vorzugsweise BigDecimal(String) oder BigDecimal.valueOf(double).
Die Ergebnisse dieses Konstruktors können etwas unvorhersehbar sein. Man könnte annehmen, dass das Schreiben von new BigDecimal(0.1) in Java ein BigDecimal erzeugt, das genau gleich 0,1 ist (ein unskalierter Wert von 1, mit einer Skalierung von 1), aber es ist tatsächlich gleich 0,1000000000000000055511151231257827021181583404541015625. Das liegt daran, dass 0,1 nicht exakt als Double (oder übrigens als binärer Bruch beliebiger Länge) dargestellt werden kann. Daher ist der Wert, der an den Konstruktor übergeben wird, ungeachtet des Aussehens nicht genau gleich 0,1.
Der String-Konstruktor hingegen ist perfekt vorhersagbar: Das Schreiben von new BigDecimal(“0.1”) erzeugt ein BigDecimal, das genau gleich 0.1 ist, wie man es erwarten würde. Daher wird generell empfohlen, den String-Konstruktor diesem vorzuziehen.
Wenn ein Double als Quelle für ein BigDecimal verwendet werden muss, beachten Sie, dass dieser Konstruktor eine exakte Konvertierung bereitstellt; Es ergibt nicht das gleiche Ergebnis wie das Konvertieren des Doubles in einen String mit der Double.toString(double)-Methode und der anschließenden Verwendung des BigDecimal(String)-Konstruktors. Um dieses Ergebnis zu erhalten, verwenden Sie die statische valueOf(double)-Methode.
Was würden Sie sagen, wenn Sie in einem Dienst sind und nur in einer Zeichenfolge übergeben würden. Beachten Sie, dass es sich um eine ganze Zahl, ein Double usw. handeln kann.
– PeterS
1. März 2019 um 12:30 Uhr
In diesem Fall würde ich new BigDecimal (“string_value”) verwenden. Auf diese Weise würde es sowohl für Ganzzahlen als auch für Dezimalzahlen korrekt funktionieren.
Es ist keine gute Praxis, den Konstruktor zu verwenden, um die Klassen “String”, “BigInteger”, “BigDecimal” und primitive Wrapper zu instanziieren. rules.sonarsource.com/java/RSPEC-2129
– Nate Getch
24. Mai 2019 um 21:18 Uhr
Sie speichern 135,69 als String in Währung. Aber anstatt die variable Währung zu übergeben, übergeben Sie erneut 135,69 (doppelter Wert) an new BigDecimal(). Sie sehen also viele Zahlen in der Ausgabe. Wenn Sie die Währungsvariable übergeben, lautet Ihre Ausgabe 135,69
Darf ich etwas hinzufügen. Wenn Sie eine Währung verwenden, sollten Sie Scale(2) verwenden, und Sie sollten wahrscheinlich eine runde Methode finden.
BigDecimal b = BigDecimal.valueOf(d);
import java.math.*;
public class Test {
public static void main(String[] args)
{
// Creating a Double Object
Double d = new Double("785.254");
/// Assigning the bigdecimal value of ln to b
BigDecimal b = BigDecimal.valueOf(d);
// Displaying BigDecimal value
System.out.println("The Converted BigDecimal value is: " + b);
}
}
kaltes_Gebräu
Spring Framework bietet eine hervorragende utils-Klasse, um dies zu erreichen.
Sie sicher Art von
currency
ist Schnur? Und Sie lesen den Wert nur als Zeichenfolge?– Rohit Jain
28. Februar 2015 um 16:21 Uhr
mögliches Duplikat von Bestimmte Genauigkeit eines BigDecimal festlegen
– Robert Moskal
28. Februar 2015 um 16:21 Uhr
Ihre Währung ist nicht einmal eine
String
beginnen mit; benutze einfach dieBigDecimal
Konstrukteur mit aString
als Argument.– fg
28. Februar 2015 um 16:24 Uhr
Es könnte viele Lösungen geben, aber wissen Sie, warum es passiert? Lesen Sie dies, wenn Sie dies nicht tun: effbot.org/pyfaq/…
– Cem Kalyoncu
28. Februar 2015 um 17:32 Uhr