2016-06-23 10 views
2

Stellen habe ich einen lange das ist was einen Preis:Java, wie man Ziffern in einer langen Weise so abschneidet, dass das Runden nachahmt?

548880 

Vielleicht einen Preis wie 54,8880 angibt. Die lange Form wird verwendet, um die Daten über die Leitung zu übertragen.

Ich möchte den Preis einfach auf eine bestimmte Genauigkeit runden.

Zum Beispiel 54.8880 --> 54.89, also meine letzte lang wird 548900.

Ist es möglich, die lange direkt auf diese Weise abzurunden, oder hätte ich lange BigDecimal neu zu fassen, rund, und dann zurück zu lange?

+0

Was ist los mit den führenden 0s? –

+0

Es gibt ['NumberFormat'] (https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html) und [' DecimalFormat'] (https://docs.oracle. com/javase/8/docs/api/java/text/DecimalFormat.html), die Ihnen bei dieser Formatierung helfen können. –

+0

Unsere Preise unsere 8 Ziffern, also die führenden Nullen sind Platzhalter, da wir eine Zahl wie 0005 senden könnten, 5, 005 bedeuten 50, 05 bedeuten 500 und 5 bedeuten 5000 –

Antwort

2
long n = 33333; // your number 
int digit = n%10; // will return 3 
if(digit < 5) 
    n -= digit; // 33330 
else {n-= digit; n += 10;} // 33340 

Ändern Sie 10, um Ihrer Genauigkeit zu entsprechen.

+0

Danke, das ist mehr nach dem, was ich dachte. Lassen Sie mich es wirklich schnell testen –

+0

Dies ist def entlang der Linien von dem, was ich will, aber wenn ich meine Präzision von 10 auf 100 ändern, gibt es nicht 33400, es gibt 33310 zurück. –

+0

Sie müssen 10 in der letzten ändern Linie. Auch 33333 würde wegen der Rundung immer 33330 zurückgeben. 33340 war nur ein Beispiel. – Shiro

1

Die etwas heikel Einzeiler auf ein Vielfaches von 100 bis rund ist:

(n + 50)/100 * 100 

die Konstanten zu runden anderen Genauigkeiten anpassen.

+0

Ich habe dies eigentlich nicht in der ursprünglichen Frage erwähnt, aber ich muss eigentlich immer in Richtung negativer Unendlichkeit runden. Das ist ziemlich schlau, aber würde es solche Rundungen ermöglichen? –

+1

Für positive Zahlen ist dies noch einfacher: n/100 * 100 – Henry