Java 我能';t截断要比较的数字
我需要比较十进制类型的数字,其中比较将构成十进制数字3,但与我的代码,它不能做到这一点 我也试过,但也没有成功 代码如下: 数字比较= -3.1756-3.175这是事实 3.174;3.175这是错误的Java 我能';t截断要比较的数字,java,Java,我需要比较十进制类型的数字,其中比较将构成十进制数字3,但与我的代码,它不能做到这一点 我也试过,但也没有成功 代码如下: 数字比较= -3.1756-3.175这是事实 3.174;3.175这是错误的 公共静态布尔值等于三位小数(双1,双2) int a = (int) Math.floor(one*1000); int b = (int) Math.floor((two*1000)); if(a == b){ System.out.println(true);
公共静态布尔值等于三位小数(双1,双2)
int a = (int) Math.floor(one*1000);
int b = (int) Math.floor((two*1000));
if(a == b){
System.out.println(true);
System.out.println(a + "---" + b);
return true;
}
else
System.out.println(false);
System.out.println(a + "---" + b);
return false;
因为您使用的是floor()
,所以您不仅仅是在小数点后截断。您将移动到下一个较小的整数。因为这里处理的是负数,floor(-3.1756)
意外地变成了-3176(不是-3175!)。因此,这两个数字并不相等
因此,要进行截断,必须对负数使用ceil()
:
int a = (int) (one < 0 ? Math.ceil(one * 1000) : Math.floor(one*1000));
int b = (int) (two < 0 ? Math.ceil(two * 1000) : Math.floor(two*1000));
inta=(int)(一个<0?Math.ceil(一个*1000):Math.floor(一个*1000));
intb=(int)(两个<0的数学单元(两个*1000):数学层(两个*1000));
另一种选择可能是对尊重.DOWN的函数使用舍入。请展示您的整个函数,并给出输入示例,您的函数将返回您不期望的结果。我刚刚添加了完整的代码,但正如我所说,我想买两个小数点后三位的数字,在出版物中我还留下了两个例子,一个是真的,另一个是假的,你在截断,不是吗rounding@MadPhysicist我想这就是他想要的。这两个例子看起来都像是预期的结果。3.174 != 3.175至小数点后三位。