1.5
ist, die Anzahl der signifikanten Stellen ungeachtet der dasselbe als 1.50
(und sogar 1.5000000000000
).
Sie müssen den Wert der Nummer von seiner Präsentation trennen.
Wenn Sie es Ausgang mit zwei Dezimalstellen, nur String.format
verwenden, wie zum Beispiel mit:
public class Test
{
public static void main(String[] args) {
double d = 1.50000;
System.out.println(d);
System.out.println(String.format("%.2f", d));
}
}
die Ausgänge:
1.5
1.50
Wenn Sie noch eine Funktion, die alle das tut für Sie und gibt Ihnen ein bestimmtes Format, müssen Sie die Zeichenfolge mit etwas zurückgeben:
public static String roundOff(double num, double acc, String fmt) {
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
und nennen Sie es mit:
resultString = roundOff(value, 20, "%.2f"); // or 100, see below.
Dies ermöglicht es Ihnen, die Genauigkeit und Ausgabeformat in irgendeiner Weise Sie wünschen zuzuschneiden, obwohl Sie können immer noch hart Code die Werte, wenn Sie Einfachheit wollen:
public static String roundOff(double num) {
double acc = 20;
String fmt = "%.2f";
num *= acc;
num = Math.ceil(num);
num /= acc;
return String.format(fmt, num);
}
Ein letzter Hinweis: Ihre Frage besagt, dass Sie abrunden wollen „zwei Dezimalstellen“, aber das nicht ganz Gel mit der Nutzung von 20
wie die Genauigkeit, da das wird rund es bis zum nächsten Vielfachen von 1/20
. Wenn Sie wirklich wollen es aufgerundet auf zwei Dezimalstellen, der Wert, den Sie für accuracy
verwenden sollten, ist 100
.
Es gibt kein separates 'double' für 1,5 und für 1,50. Sie sind zahlenmäßig gleich, es gibt also nur eine "doppelte" Darstellung von beiden. –
Vielleicht sollte Ihre Methode 'String' zurückgeben, anstatt' double', so dass Sie damit beliebige Formatierungen machen können. –
Bist du dir sicher "20"? Vielleicht habe ich missverstanden, was Sie zu tun versuchen, aber Ihre Methode für '1.489' würde' 1.49' nicht zurückgeben. Ich würde denken, dass Sie die Genauigkeit für zwei Dezimalstellen auf "100" setzen möchten. – cyon