我需要将使用特定语言环境格式化的字符串转换为我想要的语言环境。 我收到的字符串如下:
0.00
123,133.07
3,700.36
现在,我将解析该字符串浮动而不包含小数部分,并将“,”分隔符替换为“。”,预期结果应该像
0
123.133
3.700
这是我的代码:
NumberFormat format = NumberFormat.getInstance(Locale.ITALY);
Number number = format.parse(myStringUnformatted);
return number.floatValue();
但是用这种方法我得到了
0(正确)
123.133(正确)
3.7(错误)
我该怎么办?
答案 0 :(得分:1)
您需要将数字的内部表示与文本表示分开。
首先,您会以某种格式获得数字的文本表示。然后,您将此数字解析为内部表示。为此,您需要提供文本表示的格式规则。据我所知,您的输入不是意大利语格式,因为它们使用逗号作为小数。因此,您的号码未正确解析。解析后,您的号码将有一个内部表示,然后在打印时可以调整到某个区域。
此外,我在代码中看不到任何会删除任何小数的内容。
代码应该是这样的:
//input is in US format
final NumberFormat format = NumberFormat.getInstance(Locale.US);
final Number number = format.parse("123,133.07");
//To print the number in Italian format, without decimals (gets rounded off though)
System.out.println(String.format(Locale.ITALY, "%.0f", number));
//To return rounded number
return Math.round(number.doubleValue());
//To return number without the decimals
return number.longValue();
请注意,数字的意大利格式不包括.
作为千位分隔符。
答案 1 :(得分:0)
你确定在格式化字符串时没有错吗?
我刚试过这个:
public class numberformat {
public static float parse(String numberString) throws ParseException {
NumberFormat format = NumberFormat.getInstance(Locale.ITALY);
Number number = format.parse(numberString);
return number.floatValue();
}
public static void main(String[] args) {
try {
System.out.println(parse("0"));
System.out.println(parse("123.123,07"));
System.out.println(parse("3.700,36"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
得到以下输出:
0.0
123123.07
3700.36
这似乎是你所期望的。
答案 2 :(得分:0)
According to this document你误解了意大利数字格式。在美国,逗号是数千个石斑鱼,而句点是小数点分隔符,在大多数欧洲国家,它恰恰相反。
对于您需要的输出,输入应为
0,00
123.133,07
3.700,36
我的猜测是你的输入数字实际上不是意大利语。