Java 编码美分不起作用
Java coding cents not working
我正在编写这个东西,我想添加货币,但我不知道如何实施最大 .99 美分规则
我正在使用
public static double getBal(Player player){
if(!PlayerData.getPlayerDataFile(player).contains("Money")){
return 0.00;
}
double bal = PlayerData.getPlayerDataFile(player).getDouble("Money");
return bal;
}
因此,如果我向播放器收取一些费用,它最终可能会变成 2.9333333333 或其他东西,我该如何解决这个问题?
我向他们收费
public static void setBal(Player player, double newBal){
PlayerData.setPlayerDataFileValue(player, "Money", newBal);
}
您应该使用 BigDecimal class 而不是 Double 来处理货币。
例如:
BigDecimal money = new BigDecimal("2.9");
更新
我测试了一下,效果很好:
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
注:
至于如何计算,教程很多,文档也很清楚,祝你好运。
您可以使用 DecimalFormat 和 setRoundingMode 将其四舍五入到小数点后两位。
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
对于您的代码,您可以使用
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
double unformattedBal = PlayerData.getPlayerDataFile(player).getDouble("Money");
double bal = df.format(unformattedBal);
return bal;
您也可以使用静态数学 class 来处理它:
double bal = (double) Math.round(unformattedBal * 100d) / 100d;
哦,先祝我快乐 post :)
我正在编写这个东西,我想添加货币,但我不知道如何实施最大 .99 美分规则
我正在使用
public static double getBal(Player player){
if(!PlayerData.getPlayerDataFile(player).contains("Money")){
return 0.00;
}
double bal = PlayerData.getPlayerDataFile(player).getDouble("Money");
return bal;
}
因此,如果我向播放器收取一些费用,它最终可能会变成 2.9333333333 或其他东西,我该如何解决这个问题?
我向他们收费
public static void setBal(Player player, double newBal){
PlayerData.setPlayerDataFileValue(player, "Money", newBal);
}
您应该使用 BigDecimal class 而不是 Double 来处理货币。
例如:
BigDecimal money = new BigDecimal("2.9");
更新
我测试了一下,效果很好:
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
注:
至于如何计算,教程很多,文档也很清楚,祝你好运。
您可以使用 DecimalFormat 和 setRoundingMode 将其四舍五入到小数点后两位。
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
对于您的代码,您可以使用
DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
double unformattedBal = PlayerData.getPlayerDataFile(player).getDouble("Money");
double bal = df.format(unformattedBal);
return bal;
您也可以使用静态数学 class 来处理它:
double bal = (double) Math.round(unformattedBal * 100d) / 100d;
哦,先祝我快乐 post :)