如何使用特定的语言环境将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。
以下是您如何使用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); } }