为什么matlab和java的ceil函数不同?
我正在JAVA中使用ceil函数。我想将该函数与MATLAB进行比较。但是,当我在MATLAB中使用它时,它返回不同的值。例如,我有H=7,我在JAVA中使用该代码为什么matlab和java的ceil函数不同?,java,matlab,Java,Matlab,我正在JAVA中使用ceil函数。我想将该函数与MATLAB进行比较。但是,当我在MATLAB中使用它时,它返回不同的值。例如,我有H=7,我在JAVA中使用该代码 int H=7; double Hp= Math.ceil(H/2); 它返回3。 但是,我在MATLAB中使用该函数 Hp= ceil(H/2); 它返回4。这里什么是真的?如何在JAVA中实现类似ceil函数的结果?提前感谢您您正在执行整数运算。你想要像这样的东西 int H = 7; double Hp = Math.ce
int H=7;
double Hp= Math.ceil(H/2);
它返回3。
但是,我在MATLAB中使用该函数
Hp= ceil(H/2);
它返回4。这里什么是真的?如何在JAVA中实现类似ceil函数的结果?提前感谢您您正在执行整数运算。你想要像这样的东西
int H = 7;
double Hp = Math.ceil(H / 2.0);
System.out.println(Hp);
int H = 7;
int Hp = (int) Math.floor(H / 2.0);
System.out.println(Hp);
输出为
4.0
3
如果您希望3
,您将需要
int H = 7;
double Hp = Math.ceil(H / 2.0);
System.out.println(Hp);
int H = 7;
int Hp = (int) Math.floor(H / 2.0);
System.out.println(Hp);
输出为
4.0
3
您正在执行整数运算。你想要像这样的东西
int H = 7;
double Hp = Math.ceil(H / 2.0);
System.out.println(Hp);
int H = 7;
int Hp = (int) Math.floor(H / 2.0);
System.out.println(Hp);
输出为
4.0
3
如果您希望3
,您将需要
int H = 7;
double Hp = Math.ceil(H / 2.0);
System.out.println(Hp);
int H = 7;
int Hp = (int) Math.floor(H / 2.0);
System.out.println(Hp);
输出为
4.0
3
要回答“如何在JAVA中实现类似ceil函数的结果?”,您可以对其中一个参数使用整数强制转换:
H = 7;
Hp = idivide(H,int8(2));
默认情况下,这将执行除法并将小数部分向0舍入。ceil
函数是不必要的,因为整数除法生成整数。您可以将其包装在cell
中,但不会发生任何事情
注:需要使用
idivide
,因为MATLAB实现的整数运算(我的经验与直觉相反)实际上将整数除法的小数部分舍入为最接近的整数(至少在R2014b上):
我怀疑这与rdivide
函数的某些类型转换有关。要回答“如何在JAVA中实现类似ceil函数的结果?”,您可以对其中一个参数使用整数转换:
H = 7;
Hp = idivide(H,int8(2));
默认情况下,这将执行除法并将小数部分向0舍入。ceil
函数是不必要的,因为整数除法生成整数。您可以将其包装在cell
中,但不会发生任何事情
注:需要使用
idivide
,因为MATLAB实现的整数运算(我的经验与直觉相反)实际上将整数除法的小数部分舍入为最接近的整数(至少在R2014b上):
我怀疑这与通过
rdivide
函数进行的某种类型转换有关。是H/2
还是Java中的3和Matlab中的3.5?在MATLAB中尝试H/2.0
声明H=7
,自动将数字类型提升为double
。事实上,除非您专门更改数字的数据类型,否则所有数字都将创建为double
。因此,执行ceil(H/2)
将产生4.0
,正如H/2=3.5
@rayryeng:谢谢。如何实现类似于JAVA结果(3)的结果。是ceil(H/2)-1吗?@user8430-你可以这么做。。。或者您可以使用地板
<代码>双Hp=数学楼层(H/2.0)代码>?但是,如果您决定将该定义与ceil
@user8430ceil
一起使用,当H
为负时,用1减法时要小心,floor
为四舍五入。它们是相反的。H/2
是否可能在Java中给出3,在Matlab中给出3.5?在MATLAB中尝试H/2.0
声明H=7
,自动将数字类型提升为double
。事实上,除非您专门更改数字的数据类型,否则所有数字都将创建为double
。因此,执行ceil(H/2)
将产生4.0
,正如H/2=3.5
@rayryeng:谢谢。如何实现类似于JAVA结果(3)的结果。是ceil(H/2)-1吗?@user8430-你可以这么做。。。或者您可以使用地板
<代码>双Hp=数学楼层(H/2.0)代码>?但是,如果您决定将该定义与ceil
@user8430ceil
一起使用,当H
为负时,用1减法时要小心,floor
为四舍五入。它们是对立的。如何实现结果3?因为我的问题是如何在JAVA中实现类似ceil函数的结果?@user8430-为什么要3?这与ceil
@user8430的定义相反,您的问题是正确的,答案是4(对于ceil
)。。。如果你期望3,你需要使用floor
。实际上,3是我期望的结果。我在java中使用的函数类似于上面的函数。现在,我想把它转换成matlab,然后在把它传递给ceil之前,你必须强制除法为整数,所以它或多或少是ceil(floor(h/2))。如何得到结果3?因为我的问题是如何在JAVA中实现类似ceil函数的结果?@user8430-为什么要3?这与ceil
@user8430的定义相反,您的问题是正确的,答案是4(对于ceil
)。。。如果你期望3,你需要使用floor
。实际上,3是我期望的结果。我在java中使用的函数类似于上面的函数。现在,我想把它转换成matlab,然后在把它传递给ceil之前,你必须强制除法为一个整数,所以它或多或少是ceil(floor(h/2))。