我有这段代码:
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
import java.util.Scanner;
class EntryPoint {
static Locale czech = null;
static Locale getCzechLocale(){
if (czech == null){
czech = new Locale("cs","CZ");
}
return czech;
}
public static void main(String[] args) {
Scanner sn = new Scanner(System.in);
NumberFormat nf = NumberFormat.getInstance(getCzechLocale());
System.out.println(nf.format(12000.5));
NumberFormat nf2 = NumberFormat.getCurrencyInstance(getCzechLocale());
try {
String input = sn.nextLine();
System.out.println(input);
Number n = nf.parse(input);
System.out.println(n.floatValue());
}catch(ParseException javaTextParseException){
System.err.println("Unable to parse input String");
}
}
}
我想归档这个东西:如果我输入数字“12 000,5”(如程序显示)程序解析和此字符串并将显示数字“12000.5”。 我错了什么? 现在,如果我输入“12 000,5”没有“签名程序显示浮点数”12.0“不是”12000.5“
解决 NumberFormat.Parse(String)将在第一个空格char结束,所以如果我修改trim()和Replace(“”,“”),那么结果就可以了。
答案 0 :(得分:1)
NumberFormat不会在第一个空格中停止。只是您正在使用的NumberFormat使用的分组分隔符是一个不间断的空间,而不是常规空间。
如果您复制并粘贴程序的输出以将其作为输入传递,它将很乐意将其解析回12000.5,因为输出使用了不间断的空格。
如果您希望它使用常规空格字符,请使用
DecimalFormat nf = (DecimalFormat) NumberFormat.getInstance(new Locale("cs", "CZ"));
DecimalFormatSymbols decimalFormatSymbols = nf.getDecimalFormatSymbols();
decimalFormatSymbols.setGroupingSeparator(' ');
nf.setDecimalFormatSymbols(decimalFormatSymbols);
答案 1 :(得分:-2)
试试这段代码,它对我有用:
Locale czech = new Locale("cs", "CZ");
Scanner sn = new Scanner(System.in);
NumberFormat nf = NumberFormat.getInstance(czech);
String input = sn.nextLine();
System.out.println(nf.format(Double.parseDouble(input)));
sn.close();
答案 2 :(得分:-2)
如果你使用像## ###,#
这样的固定格式,请考虑使用像DecimalFormat这样的固定格式解析器:
NumberFormat nf = new DecimalFormat("### ###.##");
Number n=nf.parse("123 456,78");