我总是喜欢在我的函数中输入数字,范围从0.1到999.9(小数部分总是以'。'分隔,如果没有小数,则没有'。',例如9或7。 / p>
如何将此String转换为浮点值而不管本地化(某些国家/地区使用','来分隔数字的小数部分。我总是使用'。'来获取它)?这取决于本地计算机设置吗?
答案 0 :(得分:21)
Float.parseFloat()
方法不依赖于语言环境。它期望一个点作为小数分隔符。如果输入中的小数点分隔符始终为点,则可以安全地使用它。
如果您需要适应不同的区域设置,NumberFormat
类提供了区域设置感知的解析和格式。
答案 1 :(得分:19)
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setDecimalSeparator('.');
DecimalFormat format = new DecimalFormat("0.#");
format.setDecimalFormatSymbols(symbols);
float f = format.parse(str).floatValue();
答案 2 :(得分:17)
valueStr = valueStr.replace(',', '.');
return new Float(valueStr);
完成
答案 3 :(得分:6)
这个怎么样:
Float floatFromStringOrZero(String s){
Float val = Float.valueOf(0);
try{
val = Float.valueOf(s);
} catch(NumberFormatException ex){
DecimalFormat df = new DecimalFormat();
Number n = null;
try{
n = df.parse(s);
} catch(ParseException ex2){
}
if(n != null)
val = n.floatValue();
}
return val;
}
答案 4 :(得分:5)
请参阅java.text.NumberFormat
和DecimalFormat
:
NumberFormat nf = new DecimalFormat ("990.0");
double d = nf.parse (text);
答案 5 :(得分:0)
我希望这段代码可以对您有所帮助。
public static Float getDigit(String quote){
char decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
String regex = "[^0-9" + decimalSeparator + "]";
String valueOnlyDigit = quote.replaceAll(regex, "");
if (String.valueOf(decimalSeparator).equals(",")) {
valueOnlyDigit = valueOnlyDigit.replace(",", ".");
//Log.i("debinf purcadap", "substituted comma by dot");
}
try {
return Float.parseFloat(valueOnlyDigit);
} catch (ArithmeticException | NumberFormatException e) {
//Log.i("debinf purcadap", "Error in getMoneyAsDecimal", e);
return null;
}
}