Java 浮动/双不';我好像不工作。结果一直是一个整数

Java 浮动/双不';我好像不工作。结果一直是一个整数,java,floating-point,double,Java,Floating Point,Double,终端: 球体的体积。 球面半径:5 体积=1.0 我试图计算常数本身,它一直是一个整数,尽管它不应该,或者至少我认为它不应该。有人能帮忙/解释一下吗?SphereVolumeContent将始终是1.0。在变量之前写入double,并不会使变量上的每个操作都加倍。如果要使SphereVolumeContent等于1.(3)必须编写: import java.util.Scanner; public class Test { public static void main(St

终端:

球体的体积。
球面半径:5
体积=1.0


我试图计算常数本身,它一直是一个整数,尽管它不应该,或者至少我认为它不应该。有人能帮忙/解释一下吗?

SphereVolumeContent
将始终是
1.0
。在变量之前写入
double
,并不会使变量上的每个操作都加倍。如果要使
SphereVolumeContent
等于
1.(3)
必须编写:

import java.util.Scanner;

public class Test {
    
    public static void main(String[] args) {
        
        Scanner userInput = new Scanner(System.in);
        
        final double PI = Math.PI;
        final double sphereVolumeConstant = (4/3);
        
        System.out.println("Volume of a sphere.");
        
        System.out.print("Radius of sphere: ");
        double radius = userInput.nextDouble();
        
        double volumeOfSphere = sphereVolumeConstant * PI * Math.pow(radius, 3);
        
        System.out.println("Volume = " + sphereVolumeConstant);
    }

}
或:


现在操作将以双精度进行,因为
4.0
(double)4
是双精度的。

因为
SphereEvolumeContainst
的值被指定为
(4/3)
,它的值将始终是
1.0
,因为整数除法是如何工作的。您需要至少将
4
3
转换为双精度/浮点:

  • final double spherevolumecont=((double)4/3)
  • final double spherevolumecont=(4/(double)3)
  • final double spherevolumecont=(4.0/3)
  • final double spherevolumecont=(4/3.0)
  • 解释整数除法以这种方式工作的原因。

    对于除数和除数,默认值为
    int
    在您的示例
    (4/3)
    ,4和3(您的除数和除数)都默认为整数。所以你把一个整数除以另一个整数。得到一个整数作为商

    final double sphereVolumeConstant = ((double) 4 / 3);
    
    一,

    然后将结果整数转换为
    双精度
    1.0

    System.out.println( 4 / 3 ) ;
    
    1.0

    如果您的意思是
    4
    3
    是浮点数,请这样说。对于
    double
    d
    标记,对于float用
    f
    标记

    double a = ( 4 / 3 ) 
    
    1.3333

    或使用

    1.3333

    BigDecimal
    如果您关心的是准确性而不是执行速度,请使用。切勿将
    float
    /
    float
    double
    /
    double
    用于金钱或其他要求准确性的事项

    传递一个包含精度(总位数)和的
    MathContext

    MathContext mc=new MathContext(7,RoundingMode.HALF_偶数);//银行家四舍五入。
    BigDecimal d=新的BigDecimal(“4”)。除法(新的BigDecimal(“3”)),mc;
    
    1.333

    或者,传递刻度(小数点分隔符右侧的位数)和

    BigDecimal e=new BigDecimal(“4”)。除法(new BigDecimal(“3”)),2,舍入模式。半偶数);
    
    1.33

    示例代码
    看看所有这些。

    是什么让
    (4/3)
    ?1.3重复。但是它没有输出令人困惑的东西,因为我把它做成了一个双精度的。比较:(双精度)(4/3)和(双精度)(4.0/3)。整数除法产生一个整数。4.0/3是一个双精度除以一个整数得到的双精度。
    double a = ( 4 / 3 ) 
    
    ( 4d / 3d ) 
    
    ( 4.0 / 3.0 )