如何使用特定的语言环境将string转换为Java?

我想将我作为string得到的一些数字转换成双精度,但是这些数字不是在美国标准语言环境中,而是在不同的数字中。 我怎样才能做到这一点?

尝试java.text.NumberFormat 。 从Javadocs:

要为不同的区域设置格式化数字,请在对getInstance的调用中指定它。

 NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); 

您也可以使用NumberFormatparsing数字:

 myNumber = nf.parse(myString); 

parse()返回一个Number ; 所以要得到一个double ,你必须调用myNumber.doubleValue()

  double myNumber = nf.parse(myString).doubleValue(); 

请注意, parse()永远不会返回null ,所以这不会导致NullPointerException 。 相反, parse会抛出一个检查ParseException如果失败。

编辑:我原来说有另一种方法转换为double :将结果投入到Double并使用拆箱。 我认为,因为一个通用的NumberFormat实例正在被使用(每个Javadocs的getInstance ),它总是会返回一个Double 。 但是DJClayworth指出Javadocs for parse(String, ParsePosition) (被parse(String)调用)说如果可能的话返回一个Long 。 因此, 将结果转换为Double是不安全的,不应该尝试!
谢谢,DJClayworth!

NumberFormat是要走的路,但是你应该知道当你的数据less于100%正确的时候出现的特性。

我发现以下有用的:

http://www.ibm.com/developerworks/java/library/j-numberformat/index.html

如果您的input可以被信任,那么您不必担心它。

你使用一个NumberFormat 。 这是一个我认为看起来正确的例子。

只是学习Java和编程。 有类似的问题。 在我的教科书中find这样的东西:

 Scanner sc = new Scanner(string); double number = sc.nextDouble(); 

这本书说扫描器自动解码stringvariables中的内容,并且扫描器类自动适应所设置语言环境的语言,系统区域设置是默认设置,但是这很容易设置为其他内容。

我这样解决了我的问题。 也许这可以解决上述问题,而不是parsing?

另外:我喜欢这个方法的原因是,当使用摆动dialouge框input,然后试图将string转换为双parsing我得到一个NumberFormatException。 事实certificate,parsing专门使用美国数字格式,而扫描仪可以处理所有格式。 扫描仪使input工作完美,即使用逗号(,)小数点分隔符。 由于大多数投票答案使用parsing我真的不知道它将如何解决这个特定的问题。 您将不得不以美国格式input您的号码,然后将其转换为您的区域设置格式。 当数字键符合逗号时,这是相当不方便的。

现在你们都可以自由地把我撕碎了;)

这应该是使用java.text.DecimalFormat没有问题。

使用NumberFormat.getNumberInstance(Locale)

你知道它是哪个区域吗? 那么你可以使用

 DecimalFormat format = DecimalFormat.getInstance(theLocale); format.parse(yourString); 

这甚至可以用于科学记数法,具有百分比符号的string或具有货币符号的string。

以下是您如何使用parseDoubleString转换为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); } }