解析字符串以加倍/浮动抛出错误

时间:2015-09-28 20:50:27

标签: java selenium type-conversion

我从UI中提取了一些像1234,2456.00等值的字符串。当我尝试将此字符串解析为float时,1234变为1234.0并且当我尝试将其解析为抛出错误的两倍时。我该如何解决这个问题?

我正在使用selenium web驱动程序和java。以下是我尝试的一些事情。

double Val=Double.parseDouble("SOQ");
double Val=(long)Double.parseDouble("SOQ");``

4 个答案:

答案 0 :(得分:2)

您的第一个问题是"SOQ"不是数字。

其次,如果您想使用String创建一个数字,可以使用parseDouble并输入一个没有小数点的值。像这样:

Double.parseDouble("1");

如果您将值保存为long,则无需进行任何转换即可将其另存为double。这将编译并打印10.0

long l = 10l;
double d = l;
System.out.println(d);

最后,请阅读此Asking a good question

答案 1 :(得分:2)

问题是您无法将非数字输入解析为Double

例如:

Double.parseDouble("my text");
Double.parseDouble("alphanumeric1234");
Double.parseDouble("SOQ");

会导致错误。

但以下内容有效:

Double.parseDouble("34");
Double.parseDouble("1234.00");

答案 2 :(得分:2)

我想你在弄清楚如何解析数字时会把它混淆一下。所以这是一个概述:

// lets say you have two Strings, one with a simple int number and one floating point number
String anIntegerString = "1234";
String aDoubleString = "1234.123";

// you can parse the String with the integer value as  double 
double integerStringAsDoubleValue = Double.parseDouble(anIntegerString);
System.out.println("integer String as double value = " + integerStringAsDoubleValue);

// or you can parse the integer String as an int (of course)
int integerStringAsIntValue = Integer.parseInt(anIntegerString);
System.out.println("integer String as int value = " + integerStringAsIntValue);

 // if you have a String with some sort of floating point number, you can parse it as double
double doubleStringAsDoubleValue = Double.parseDouble(aDoubleString);
System.out.println("double String as double value = " + doubleStringAsDoubleValue);

// but you will not be able to parse an int as double
int doubleStringAsIntegerValue = Integer.parseInt(aDoubleString); // this throws a NumberFormatException because you are trying to force a double into an int - and java won't assume how to handle the digits after the . 
System.out.println("double String as int value = " + doubleStringAsIntegerValue);

此代码将打印出来:

integer String as double value = 1234.0
integer String as int value = 1234
double String as double value = 1234.123

Exception in thread "main" java.lang.NumberFormatException: For input string: "1234.123"

当数字到达.时,Java将停止“解析”该数字,因为整数永远不会有.,而"ABC"等任何其他非数字值的数字也是如此,"123$""one" ...人类可以将“123 $”读作数字,但Java不会对如何解释“$”做出任何假设。

此外:对于float或double,您可以提供正常整数或某处.的任何内容,但除.之外不允许使用其他字符(甚至不允许,或{ {1}},甚至不是WHITESPACE)

编辑:

如果最后有一个带有“零”的数字,对于人类来说可能看起来很好并且可以理解,但是计算机不需要它们,因为在省略零时数字仍然在数学上是正确的。
例如;"123.00"123相同 打印或再次显示数字时只是格式化输出的问题(在这种情况下,数字将被转换回字符串)。你可以这样做:

123.000000

您可以在 String numericString = "2456.00 "; // your double as a string double doubleValue = Double.parseDouble(numericString); // parse the number as a real double // Do stuff with the double value String printDouble = new DecimalFormat("#.00").format(doubleValue); // force the double to have at least 2 digits after the . System.out.println(printDouble); // will print "2456.00" here上找到相关概述。

例如表示“这是一个数字,但省略前导零” 0 表示“这是一个数字,即使零“

,也不会被省略

希望这会有所帮助

答案 3 :(得分:0)

您要解析为Double的数字包含","和空间,所以你需要先解决它们,然后再进行解析

String str = "1234, 2456.00".replace(",", "").replace(" ", "");
double Val=Double.parseDouble(str);