我有这段代码:
Long dval = new Long((new Date()).getTime());
System.out.println("ogval:"+dval);
Double dd = (double)dval;
System.out.println("dval:"+dd);
这是输出:
ogval:1381490769636
dval:1.381490769636E12
当我将值转换为Double时,它会添加一个小数点。我可以进行类型转换并将值设置为double吗?
所需的输出是:
ogval:1381490769636
dval:1381490769636
我有一个函数,其参数只接受double值。当我尝试传递时间戳时,它传递方法内的十进制值。 我无法编辑该函数,因为它是某个包的内置函数。
答案 0 :(得分:2)
简单的答案是否定的。
浮动类型可以包含一些任意值的整数,由浮点数的存储方式给出。如果数字太大,则会转换为十进制数。
如果您需要使用大整数值,请使用BigInteger
class。
检查这些不完美的好工具是float converter。 在浮点转换器中尝试123456789,它不会被准确存储。
答案 1 :(得分:2)
使用DecimalFormat
,例如:
Long dval = new Long((new Date()).getTime());
System.out.println("ogval:" + dval);
Double dd = (double) dval;
DecimalFormat format=new DecimalFormat("##########");
System.out.println("dval:" + format.format(dd));
答案 2 :(得分:2)
您的问题不在于您使用的类型,而在于您使用的格式。目前,使用默认格式,因为string + double
隐式调用Double.toString
,使用科学记数法将您的特定double
转换为String
。如果您希望使用printf
或Java提供的任何其他格式化方法,您可以强制使用不同的格式:
System.out.printf("dval: %12.0f", dd);
(demo)
答案 3 :(得分:1)
作为替代方案,您可以尝试使用bigdecimal
Long dval = new Long((new Date()).getTime());
System.out.println("ogval:"+dval);
Double dd = (double)dval;
System.out.println("dval:"+dd);
BigDecimal bd = new BigDecimal(dval);
System.out.println("bdval:"+bd.toPlainString());