2016-05-19 5 views
0
arbeiten

Ich bin Codierung dieses Ding, und ich möchte Währung hinzufügen, aber ich weiß nicht, wie die max .99 cent RegelJava-Codierung Cent nicht

Im

public static double getBal(Player player){ 
    if(!PlayerData.getPlayerDataFile(player).contains("Money")){ 
     return 0.00; 
    } 
    double bal = PlayerData.getPlayerDataFile(player).getDouble("Money"); 
    return bal; 
} 

mit implementieren, so wenn ich den player etwas auflade, könnte es als 2.9333333333 oder etwas enden, wie könnte ich das beheben?

Ich beschwöre sie mit

public static void setBal(Player player, double newBal){ 
    PlayerData.setPlayerDataFileValue(player, "Money", newBal); 
} 
+0

Mögliches Duplikat von [Wie wird eine Zahl auf n Dezimalstellen in Java abgerundet] (http://stackoverflow.com/questions/153724/how-to-round-a-number-to -n-decimal-places-in-java) – sinclair

+0

Mögliches Duplikat von [Warum nicht Double oder Float zur Darstellung der Währung verwenden?] (http://stackoverflow.com/q/3730019/5221149) – Andreas

Antwort

3

Sie BigDecimal Klasse statt Doppel verwenden sollten Währung zu handhaben.
Zum Beispiel:

BigDecimal money = new BigDecimal("2.9");

UPDATE
ich es erprobt, es funktioniert ziemlich gut:

String priceStr = "2.9"; 
    BigDecimal price = new BigDecimal(priceStr); 
    System.out.println(price); 
    // output 2.9 

    priceStr = "2.90"; 
    price = new BigDecimal(priceStr); 
    System.out.println(price); 
    // output 2.90 

    Double priceDouble = 2.90; 
    price = new BigDecimal(priceDouble); 
    System.out.println(price); 
    // output 2.89999999999999... need to do some rounding 

    priceDouble = 2.90; 
    price = new BigDecimal(priceDouble).setScale(2, RoundingMode.CEILING); 
    System.out.println(price); 
    // output 2.90 

Hinweis:
Denn wie die Berechnung zu tun, gibt es viele Tutorials und die Dokumentation ist auch klar, viel Glück.

+0

Ich habe das versucht, aber ich habe es immer noch 2.3399999 es hat es nicht rund – Kingbluesapphire

+0

@Kingbluesapphire Antwort aktualisiert. –

1

Sie können DecimalFormat und setRoundingMode verwenden, um sie auf zwei Dezimalstellen zu runden.

DecimalFormat df = new DecimalFormat("#.##"); 
df.setRoundingMode(RoundingMode.CEILING); 

für Ihren Code, können Sie auch verwenden,

DecimalFormat df = new DecimalFormat("#.##"); 
df.setRoundingMode(RoundingMode.CEILING); 
double unformattedBal = PlayerData.getPlayerDataFile(player).getDouble("Money"); 
double bal = df.format(unformattedBal); 
return bal; 

Sie die statische Math-Klasse verwenden könnte zu handhaben:

double bal = (double) Math.round(unformattedBal * 100d)/100d; 

Oh, und glücklich ersten Beitrag für mich :)