好吧也许我只需要第二双眼睛。
我有一个浮动,我变成了一个字符串。然后我想用它的周期/小数将其拆分,以便将其作为货币表示。
继承我的代码:
float price = new Float("3.76545");
String itemsPrice = "" + price;
if (itemsPrice.contains(".")){
String[] breakByDecimal = itemsPrice.split(".");
System.out.println(itemsPrice + "||" + breakByDecimal.length);
if (breakByDecimal[1].length() > 2){
itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1].substring(0, 2);
} else if (breakByDecimal[1].length() == 1){
itemsPrice = breakByDecimal[0] + "." + breakByDecimal[1] + "0";
}
}
如果你拿这个并运行它,你会在第6行(在上面的代码中)得到一个数组索引越界错误,关于小数后面没有任何内容。
实际上在第5行,当我打印出数组的大小时,它是0。
对于他们而言,这些都是荒谬的错误,而不是我只是忽视的东西。
就像我说的那样,另外一双眼睛正是我所需要的,所以在指出一些对你来说显而易见的事情时请不要粗鲁,但我忽略了它。
提前致谢!
答案 0 :(得分:19)
split使用正则表达式,其中“。”意味着匹配任何角色。你需要做什么
"\\."
编辑:修复,感谢评论者和编辑
答案 1 :(得分:0)
改为使用小数格式:
DecimalFormat formater = new DecimalFormat("#.##");
System.out.println(formater.format(new Float("3.76545")));
答案 2 :(得分:0)
我没有在java上工作太多,但在第2行,也许价格没有转换为字符串。 我在C#工作,我会用它: String itemsPrice =“”+ price.ToString();
也许您应该首先明确地将价格转换为字符串。 因为,它没有被转换,字符串只包含“”而没有“。”,所以没有拆分和扩展名arrayOutOfBounds错误。
答案 3 :(得分:0)
如果您想以价格形式使用NumberFormat。
Float price = 3.76545;
Currency currency = Currency.getInstance(YOUR_CURRENCY_STRING);
NumberFormat numFormat = NumberFormat.getCurrencyInstance();
numFormat.setCurrency(currency)
numFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits());
String priceFormatted = numFormat.format(price);
System.out.println("The price is: " + priceFormatted);
YOUR_CURRENCY_STRING是您正在处理的货币的ISO 4217货币代码。
此外,以非精确格式(例如浮点)表示价格通常是个坏主意。你应该使用BigDecimal或Decimal。
答案 4 :(得分:0)
如果您想自己处理,请尝试以下代码:
public static float truncate(float n, int decimalDigits) {
float multiplier = (float)Math.pow(10.0,decimalDigits);
int intp = (int)(n*multiplier);
return (float)(intp/multiplier);
}
并获取截断的价格:
float truncatedPrice = truncate(3.3654f,2);
System.out.println("Truncated to 2 digits : " + truncatedPrice);