基本上我是与一个游戏工作,所以我想要一个简单的方法来确定项目数量。
例如,我正在创建一个ArrayList<Item>();
,我正在识别如下项目:
//Item(itemId, itemAmount);
new Item(ItemsList.COINS, 1_000_000);//this is 1m of coins
new Item(ItemsList.FISH, 2000);//this is 2k of fish
我想要一种更简单的方法,而不是像
那样写金额new Item(ItemsList.COINS, Amounts.1M);
new Item(ItemsList.FISH, Amounts.2k);`
像这样的,我想指导我如何创建类的数额,并继续关于它?
当然,我不会创建一个枚举与所有的值,什么是做这个任务的聪明的方式。请帮助我,谢谢!
您可以尝试这样做:
class Amounts {
public static int k(int amount){
return amount * 1_000;
}
public static int M(int amount){
return amount * 1_000_000;
}
(...)
}
然后你可以这样使用:
new Item(ItemList.COINS, Amounts.M(1));
new Item(ItemList.FISH, Amounts.k(2));
然而,我个人更喜欢使用常量(并在三位数字后插入_
),如:
new Item(ItemList.COINS, 1_000_000);
或者是
new Item(ItemList.COINS, 1 * Amounts.MILLION);
(并在Amounts
类中定义一个静态常数public static int MILLION = 1_000_000;
)
您可以使用下面的函数将数字转换为您的格式,并可以在您的代码中使用,根据您的要求进行一些更改-
public static String formatNumber(double value) {
String suf = " kmbt";
NumberFormat formatter = new DecimalFormat("#,###.#");
int power = (int)StrictMath.log10(value);
value = value/(Math.pow(10,(power/3)*3));
String result =formatter.format(value);
result = result + suf.charAt(power/3);
return result .length()>4 ? result .replaceAll("\.[0-9]+", "") : result ;
}