Java Math.ceil(x/50d)-什么是;50d“;

Java Math.ceil(x/50d)-什么是;50d“;,java,math,ceil,Java,Math,Ceil,我发现了这个代码片段,想知道50d到底是什么意思?我一直在网上搜索,但找不到任何有用的东西 下面是完整的代码片段: public int CalculateMinimumDiameterFilter(){ CalculateFilterAreaRequirement(); double val1 = filterAreaRequirement /Math.PI; double val2 = Math.sqrt(val1); double val3 = val2 *

我发现了这个代码片段,想知道
50d
到底是什么意思?我一直在网上搜索,但找不到任何有用的东西

下面是完整的代码片段:

public int CalculateMinimumDiameterFilter(){
    CalculateFilterAreaRequirement();
    double val1 = filterAreaRequirement /Math.PI;
    double val2 = Math.sqrt(val1);
    double val3 = val2 * 2;

    int val4 = (int)Math.round(val3 * 1000);
    minimumDiameterFilter = (int) (Math.ceil(val4 / 50d) * 50);

    return minimumDiameterFilter;
}

有人能给我解释一下
50d
的实际作用吗?

后缀
d
强制它是
double
文本,而不是
int
文本。

50d
的意思是带有
double
类型的数字50


这是必需的,因为
val4
作为
int
,除以
50
作为
int
,将返回一个
int
,Java将把它四舍五入到地板上,这不是预期的。

d
double
的缩写。标准数字
50
没有任何小数点(即:
50.0
)只是一个
int
。您需要将
d
添加到普通
50
中,以说明您希望将其表示为
double

这是一个明确的数字声明,即JLS中定义的
double

如果浮点文字的后缀为ASCII字母F或F,则它的类型为float;否则,它的类型是double,并且可以选择使用ASCII字母D或D作为后缀

你可以看一看,这会给你一个很好的解释。
50d
在这种情况下,表示50不是整数(
int
)类型,而不是double(50.0)类型

我们不仅可以做
50d
。你也可能会看到人们写这样的东西:

long serialNo = 1234567L;
在这种情况下,数字后面的
L
表示我想让serialNo的类型为
long
。如果不放置
L
,则默认的整数类型将是整数(
int


编写代码的人不必编写
50d
,也可以将其编写为50.0。在这种情况下,这意味着同样的事情,因为默认情况下,Java中的浮点值是双精度的。除非后缀另有规定(如
l
d
f
等),否则整数为
int

例子:
50d
将50定义为双精度它将50定义为双精度。50f将是浮点数。总的来说,使用
d
将数字标记为双精度不是很常见。你也可以只写
50.0
,每个人都知道你的意思。但是,请记住,如果您确实想要浮点而不是双精度浮点,则需要编写
50.0f
。这就是为什么每个人都更习惯于看
f
,而不是
d
:)人们之所以对你投反对票,是因为他们认为你之前没有做过研究。另一方面,特别是对于新手来说,以前的研究可能很难做——如果你不知道文字;它们的语法。。。你应该如何找到关于他们的信息。长话短说:+1来自我。。。
double d1 = 50.0;      //ok! 50.0 will be double by default
double d2 = 50.0d;     //ok! 50.0 is already in double, no harm putting a "d"
double d3 = 50d;       //ok! 50 becomes a double
double d4 = 50;        //ok! trying to store int into double (no loss of precision)
double d5 = 50f;       //ok! trying to store float into double (no loss of precision)

float f1 = 0.1f;  //ok!
float f2 = 0.0;   //not ok! trying to store double into float (loss of precision)
float f3 = 50d;   //not ok! trying to store double into float (loss of precision)