我试图将一个long(someValue)除以int。那必须返回一个十进制值。 我试过了,
double result = (double)(someValue/3600);
double result = (double)((double)someValue/(double)3600);
但无济于事。我得到的结果是整数。 请帮忙。
答案 0 :(得分:4)
这不会起作用,因为你正在计算结果,然后进行演员表。
double result = (double)(someValue/3600);
但为什么这不起作用?对我来说它工作正常,因为你在计算之前将值转换为加倍。
double result = (double)((double)someValue/(double)3600);
但是没有必要再次投射结果!或者将两个值都转换为double。如果你在数字的末尾添加一个d
来告诉编译器这个数字应该是一个dobule值,那就足够了:
double result = someValue/3600d;
答案 1 :(得分:2)
如果您需要精确的浮点计算,建议的方法是使用BigDecimal
。这是真正独立于平台的方式(任何其他方式都可以获得与架构相关的结果)。
http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
这是关于BigDecimals
及其用法的非常好的教程
http://www.opentaps.org/docs/index.php/How_to_Use_Java_BigDecimal:_A_Tutorial
答案 2 :(得分:1)
double result = (double)(someValue/3600);
这不起作用,因为首先计算someValue/3600
,然后计算int
。
你应该明确地施放一方(另一方将隐式)
:double result = (double)someValue/3600;
答案 3 :(得分:0)
您需要至少有一个为double
。您将除法的结果类型化为double
。这段代码将成为:
double result = ((double)someValue)/((double)3600);
如果有些人不相信上述代码,请参阅this example。
另一种解决方案是使用3600.0代替:
double result = someValue/3600.0;
答案 4 :(得分:0)
做浮点数时要注意的事项:
首先,someValue/3600
将首先计算,这是一个整数除法,它会给你一个整数,然后转换成一个double,它不会给你一个正确的答案。
你应该让两个值都是双倍的。因此,您的第二种方式应该正常工作。这里只是一些额外的信息:你真的不需要将这两个数字都加倍。在除法期间,如果编译器发现其中一个值是整数而另一个是double,则整数将被提升为计算的两倍,从而得到相同的结果。
即使您使用第二种方式,您有时也可能会发现结果“不准确”。这是因为浮点数只是二进制近似值,不能准确地呈现所有十进制值。如果您想要“准确”的十进制值,或者学会正确处理浮点数,可以考虑使用BigDecimal。