我从UI中提取了一些像1234,2456.00等值的字符串。当我尝试将此字符串解析为float时,1234变为1234.0并且当我尝试将其解析为抛出错误的两倍时。我该如何解决这个问题?
我正在使用selenium web驱动程序和java。以下是我尝试的一些事情。
double Val=Double.parseDouble("SOQ");
double Val=(long)Double.parseDouble("SOQ");``
答案 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);