Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数学简单示例_Java_Math_Floating Point_Jls - Fatal编程技术网

Java 数学简单示例

Java 数学简单示例,java,math,floating-point,jls,Java,Math,Floating Point,Jls,我正在努力做简单的数学。a=5,b=a/2&(四舍五入),当我四舍五入时,它必须是5/2=3,c=b-a,3-5=2。我的问题是,当我除以5/2,再将其四舍五入时,b得到的是2,而不是3。有人能帮我把钱凑齐拿到3英镑吗?谢谢 int a=5; int b=(int)Math.ceil(a/2); int c=b-a; System.out.println(b); System.out.println(c); 您应该在此行中使用浮点值2,而不是整数: int b = (int) Mat

我正在努力做简单的数学。a=5,b=a/2&(四舍五入),当我四舍五入时,它必须是5/2=3,c=b-a,3-5=2。我的问题是,当我除以5/2,再将其四舍五入时,b得到的是2,而不是3。有人能帮我把钱凑齐拿到3英镑吗?谢谢

int a=5;

int b=(int)Math.ceil(a/2);

int c=b-a;


System.out.println(b);

System.out.println(c);

您应该在此行中使用浮点值
2
,而不是整数:

int b = (int) Math.ceil(a / 2f);//also you can use "2.0" or "2d" instead of "2f"
您的版本使用
int
除法(生成
2
int
值)和
2f
恒力来使用浮点除法,并将
a
值提升为
浮点
(除法后生成
浮点
2.5

这是可能的,因为JLS规格适用于:

对操作数执行二进制数字提升(§5.6.2)

这就是在我们的例子中,
int
float
除法操作数的工作原理:

加宽基元转换(§5.1.2)用于转换以下规则指定的一个或两个操作数: 如果其中一个操作数的类型为double,则另一个操作数将转换为double。 否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float


您应该在此行中使用浮点值
2
,而不是整数:

int b = (int) Math.ceil(a / 2f);//also you can use "2.0" or "2d" instead of "2f"
您的版本使用
int
除法(生成
2
int
值)和
2f
恒力来使用浮点除法,并将
a
值提升为
浮点
(除法后生成
浮点
2.5

这是可能的,因为JLS规格适用于:

对操作数执行二进制数字提升(§5.6.2)

这就是在我们的例子中,
int
float
除法操作数的工作原理:

加宽基元转换(§5.1.2)用于转换以下规则指定的一个或两个操作数: 如果其中一个操作数的类型为double,则另一个操作数将转换为double。 否则,如果其中一个操作数的类型为float,则另一个操作数将转换为float


您可以使用一个小技巧来加快速度:

int b =(a + 1) / 2;
因为你是用2除,如果数字是奇数加1,你会得到精确的上限舍入值。如果数字为偶数,则四舍五入将得到预期的一半

编辑


或者一般来说,如果你想计算
Math.ceil(a/b)
,你可以使用以下公式:
(a+b-1)/b
,假设a和b为正。

你可以使用一些小技巧来加快速度:

int b =(a + 1) / 2;
因为你是用2除,如果数字是奇数加1,你会得到精确的上限舍入值。如果数字为偶数,则四舍五入将得到预期的一半

编辑


或者一般来说,如果你想计算
Math.ceil(a/b)
,你可以用下面的公式:
(a+b-1)/b
,假设a和b为正。

(a/2d)
也应该起作用,以强制执行双除法。Nit:它不是
浮点除法,它是浮点除法(因为
2.0
double
)。同样地,
2.5
double
,而不是
float
。谢谢你的回答,你说得对。谢谢@Cootriglad,它很有用!欢迎来到Stackoverflow,别忘了在结束这个问题时标记一个答案:)
(a/2d)
也应该有效,强制执行双除法。Nit:它不是
浮点
除法,而是浮点除法(因为
2.0
)。类似地,
2.5
是一个
double
,而不是一个
float
。谢谢你的回复,你说得对。它可以工作。谢谢@Cootriglad它的帮助!欢迎来到Stackoverflow,不要忘记标记一个被接受的答案来结束这个问题:)阅读Java中的整数算术。@haylu检查此项:阅读Java中的整数算术。@haylu检查此项:更一般地说,要将
a/b
四舍五入,您需要在分子中添加
b-1
(a+b-1)/b
(假设
a
b
是正的)。是的,这概括了这个问题。感谢您指出这一点。更一般地说,要将
a/b
四舍五入,您将
b-1
添加到分子中:
(a+b-1)/b
(假设
a
b
是正的)是的,这概括了这个问题。谢谢你指出这一点。