我已经搜索了一下,但找不到找到解决方案的示例。这是我的问题:
String s = "100.000";
long l = Long.parseLong(s);
第二行代码尝试将字符串's'解析为long,抛出 NumberFormatException 。
有解决方法吗?问题是表示十进制数的字符串实际上是以毫秒为单位的时间,因此我无法将其强制转换为int,因为我失去了精度。
答案 0 :(得分:4)
你可以使用BigDecimal来处理双重解析(没有Double.parseDouble()
可能带来的精确丢失的风险):
BigDecimal bd = new BigDecimal(s);
long value = bd.longValue();
答案 1 :(得分:4)
因为我不知道你的100.000等于100或10万 我认为最安全的解决方案是:
NumberFormat nf = NumberFormat.getInstance();
Number number = nf.parse("100.000");
long l = number.longValue();
答案 2 :(得分:2)
'long'是一个整数类型,因此String解析因小数点而被拒绝。选择更合适的类型可能会有所帮助,例如双倍。
答案 3 :(得分:0)
只需删除千位的所有空间持有者,点......
s.replaceAll(".","");
答案 4 :(得分:0)
您应该使用NumberFormat来解析值
答案 5 :(得分:0)
我们可以使用正则表达式来修剪小数部分。然后使用parseLong
Long.parseLong(data.replaceAll(" \ .. *",""));
答案 6 :(得分:-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