2

我用谷歌搜索了一下,但找不到找到解决方案的例子。这是我的问题:

String s = "100.000";
long l = Long.parseLong(s);

尝试将字符串 's' 解析为 long 的第二行代码会引发NumberFormatException

有没有解决的办法?问题是表示十进制数的字符串实际上是以毫秒为单位的时间,所以我不能将它转换为 int 因为我失去了精度。

4

7 回答 7

4

您可以使用 BigDecimal 来处理双重解析(没有您可能会遇到的精度损失风险Double.parseDouble()):

BigDecimal bd = new BigDecimal(s);
long value = bd.longValue();
于 2012-10-26T15:28:13.850 回答
4

我不知道你的 100.000 等于 100 还是 100 000 我认为最安全的解决方案是:

NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("100.000");
long l = number.longValue();
于 2012-10-26T15:47:36.813 回答
2

'long' 是整数类型,因此字符串解析由于小数点而被拒绝。选择更合适的类型可能会有所帮助,例如双精度型。

于 2012-10-26T15:30:14.353 回答
0

只需删除数千个的所有占位符,点...

s.replaceAll(".","");
于 2012-10-26T15:29:39.723 回答
0

您应该使用 NumberFormat 来解析值

于 2012-10-26T17:54:06.453 回答
0

我们可以使用正则表达式来去除小数部分。然后使用 parseLong

Long.parseLong(data.replaceAll("\..*", ""));

于 2015-07-12T17:42:35.303 回答
-2

如果您不想放松压力,那么您应该使用multiplication

    BigDecimal bigDecimal = new BigDecimal("100.111");
    long l = (long) (bigDecimal.doubleValue() * 1000);<--Multiply by 1000 as it
                                                         is miliseconds
    System.out.println(l);

输出:

100111
于 2012-10-26T15:36:13.420 回答