我想将我得到的一些数字转换为双打,但这些数字不是美国标准语言环境,而是另一个数字。我怎么能这样做?
答案 0 :(得分:63)
试试java.text.NumberFormat
。来自Javadocs:
要为其他区域设置格式化数字,请在对getInstance的调用中指定它。
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
您还可以使用NumberFormat来解析数字:
myNumber = nf.parse(myString);
parse()
返回Number
;为了获得double
,您必须致电myNumber.doubleValue()
:
double myNumber = nf.parse(myString).doubleValue();
请注意parse()
永远不会返回null
,因此这不会导致NullPointerException
。相反,如果parse
失败,ParseException
会抛出一个已检查的double
。
修改:我最初说有另一种转换为Double
的方式:将结果转换为NumberFormat
并使用取消装箱。我认为,由于正在使用Double
的通用实例(根据getInstance
的Javadoc),它总是返回parse(String)
。但是DJClayworth指出parse(String, ParsePosition)
的Javadoc(由Long
调用)表示如果可能的话会返回Double
。因此,将结果投射到{{1}}是不安全的,不应该尝试!
谢谢,DJClayworth!
答案 1 :(得分:6)
NumberFormat是可行的方法,但是当你的数据低于100%正确时,你应该意识到它的特殊性。
我发现以下内容有用:
http://www.ibm.com/developerworks/java/library/j-numberformat/index.html
如果您的输入可以信任,那么您不必担心它。
答案 2 :(得分:4)
您使用NumberFormat
。 Here就是一个例子,我认为看起来是正确的。
答案 3 :(得分:4)
学习java和编程。有类似的问题。在我的教科书中找到了类似的东西:
Scanner sc = new Scanner(string);
double number = sc.nextDouble();
本书说扫描程序会自动解码String变量中的内容,并且Scanner类会自动适应设置的Locale语言,系统Locale是默认设置,但很容易设置为其他内容。
我以这种方式解决了我的问题。也许这可能适用于上述问题而不是解析?另外:我喜欢这种方法的原因是当使用swing dialouge box进行输入然后尝试将字符串转换为带解析的double时,我得到了一个NumberFormatException。事实证明,解析专门使用美国数字格式,而扫描程序可以处理所有格式。即使使用逗号(,)小数分隔符,Scanner也能使输入完美无缺。由于最多投票的答案使用解析我真的不知道如何解决这个特定的问题。您必须以美国格式输入您的数字,然后将它们转换为您的语言环境格式。当一个数字键盘配有逗号时,这是相当不方便的。
现在你可以自由地把我撕成碎片;)
答案 4 :(得分:2)
使用java.text.DecimalFormat。
这应该没问题答案 5 :(得分:2)
使用NumberFormat.getNumberInstance(Locale)
答案 6 :(得分:1)
你知道它是哪个地区吗?然后你可以使用
DecimalFormat format = DecimalFormat.getInstance(theLocale);
format.parse(yourString);
这甚至适用于科学记数法,带有百分号的字符串或带有货币符号的字符串。
答案 7 :(得分:-2)
以下是使用parseDouble
将String
转换为Double
的方式:
<强> doubleExample.java 强>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class doubleExample {
public static void main(String[] args) {
Double myDouble = new Double("0");
System.out.println("Please enter a number:");
try
{
//get the number from console
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
myDouble = Double.parseDouble(br.readLine());
}
//if invalid value was entered
catch(NumberFormatException ne)
{
System.out.println("Invalid value" + ne);
System.exit(0);
}
catch(IOException ioe)
{
System.out.println("IO Error :" + ioe);
System.exit(0);
}
System.out.println("Double value is " + myDouble);
}
}