在Java中将字符串解析为长字符串
我有以下代码:在Java中将字符串解析为长字符串,java,Java,我有以下代码: public class Test { public static void main(String args[]) { String blah = "1073841824.000000000000"; Long longVersion = Long.parseLong(blah); System.out.println("Long : " + longVersion); } } 当我尝试打印结果时,我得到: Exception in t
public class Test {
public static void main(String args[]) {
String blah = "1073841824.000000000000";
Long longVersion = Long.parseLong(blah);
System.out.println("Long : " + longVersion);
}
}
当我尝试打印结果时,我得到:
Exception in thread "main" java.lang.NumberFormatException: For input
string: "1073841824.000000000000"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:589)
at java.lang.Long.parseLong(Long.java:631)
at Test.main(Test.java:5)
字符串
blah
表示一个1 GB的量。我不能只删除零,有些情况下,这些不会都是零。我不确定这里使用的Long
类型是否正确。如果要使用基元类型,use应该使用double。Long不能处理小数。但是应该使用BigDecimal类而不是double。它专为大数字设计,直接处理字符串。例如:
BigDecimal bigDecimal = new BigDecimal(blah);
看起来更像是双精度的,而不是长的。你能确认一下吗:零后的字符串是数字的小数部分吗?真是个糟糕的建议。只要字符串中的数字不是太大,就绝对没有必要使用BigDecimal。还要注意的是,BigDecimal是关于浮点数的。@GhostCat,判断OP如何说“在点之后,它们可能不都是零”,我也认为它适合于
double
或BigDecimal
。但并没有证据表明小数部分是有意义的,它确实是关于浮点数的。在给定的情况下,BigDecimal更合适,因为如果浮点数超过double允许的值,它就不会截断浮点数。我不同意你的意见@GhostCat在阅读问题之前,请不要责怪答案。题目是:解析字符串的长度一样长。不管怎样,对于一个已经被问了很多次并且回答了很多次的问题,争论没有多大意义。@Joel:BigDecimal工作得很好,谢谢。正如我在帖子中所说的,分数部分很重要。