Java中的长期划分

时间:2014-02-12 07:22:26

标签: java

我试图将一个long(someValue)除以int。那必须返回一个十进制值。 我试过了,

double result =  (double)(someValue/3600);

double result =  (double)((double)someValue/(double)3600);

但无济于事。我得到的结果是整数。 请帮忙。

5 个答案:

答案 0 :(得分:4)

  1. 这不会起作用,因为你正在计算结果,然后进行演员表。

    double result =  (double)(someValue/3600); 
    
  2. 但为什么这不起作用?对我来说它工作正常,因为你在计算之前将值转换为加倍。

    double result =  (double)((double)someValue/(double)3600);
    
  3. 但是没有必要再次投射结果!或者将两个值都转换为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。