我用谷歌搜索了一下,但找不到找到解决方案的例子。这是我的问题:
String s = "100.000";
long l = Long.parseLong(s);
尝试将字符串 's' 解析为 long 的第二行代码会引发NumberFormatException。
有没有解决的办法?问题是表示十进制数的字符串实际上是以毫秒为单位的时间,所以我不能将它转换为 int 因为我失去了精度。
我用谷歌搜索了一下,但找不到找到解决方案的例子。这是我的问题:
String s = "100.000";
long l = Long.parseLong(s);
尝试将字符串 's' 解析为 long 的第二行代码会引发NumberFormatException。
有没有解决的办法?问题是表示十进制数的字符串实际上是以毫秒为单位的时间,所以我不能将它转换为 int 因为我失去了精度。
您可以使用 BigDecimal 来处理双重解析(没有您可能会遇到的精度损失风险Double.parseDouble()
):
BigDecimal bd = new BigDecimal(s);
long value = bd.longValue();
我不知道你的 100.000 等于 100 还是 100 000 我认为最安全的解决方案是:
NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("100.000");
long l = number.longValue();
'long' 是整数类型,因此字符串解析由于小数点而被拒绝。选择更合适的类型可能会有所帮助,例如双精度型。
只需删除数千个的所有占位符,点...
s.replaceAll(".","");
您应该使用 NumberFormat 来解析值
我们可以使用正则表达式来去除小数部分。然后使用 parseLong
Long.parseLong(data.replaceAll("\..*", ""));
如果您不想放松压力,那么您应该使用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