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 )