在java中向零舍入

在java中向零舍入,java,Java,如何在java中向零进位 因此,-1.9变为-1.0,-0.2变为0.0,3.4变为3.0,依此类推 Math.round()能够更改某些参数吗?似乎您希望始终向下取整?您可以改用Math.floor 公共静态双地板(双a) 返回所需的最大(最接近正无穷大)双倍值 不大于参数,等于数学公式 整数。特殊情况: 只需将其转换为int就可以了 编辑:如果您想保留双精度,这应该足够简单: if (val < 0) return -Math.floor(-val); else retu

如何在java中向零进位

因此,-1.9变为-1.0,-0.2变为0.0,3.4变为3.0,依此类推


Math.round()
能够更改某些参数吗?

似乎您希望始终向下取整?您可以改用
Math.floor

公共静态双地板(双a)

返回所需的最大(最接近正无穷大)双倍值 不大于参数,等于数学公式 整数。特殊情况:


只需将其转换为int就可以了

编辑:如果您想保留双精度,这应该足够简单:

if (val < 0) 
   return -Math.floor(-val);
else
   return Math.floor(val);

BigDecimal
提供了许多。

像这样对long进行转换:

float x= 1.9;

long y = (long)x;

这会将正数和负数向零舍入。

使用
舍入模式。向下
,则向零舍入

例如:

    BigDecimal value = new BigDecimal("1.4");
    value = value.setScale(0, RoundingMode.DOWN);
    System.out.println(value.doubleValue());
    BigDecimal value1 = new BigDecimal("-1.4");
    value1 = value1.setScale(0, RoundingMode.DOWN);
    System.out.println(value1.doubleValue());

我不相信标准库有这样的功能

问题是,根据数字是大于还是小于0,您要求的行为(从数学上讲)非常不同(即,向上舍入为负值,向下舍入为正值)

可以使用以下方法:

public double myRound(double val) {
    if (val < 0) {
        return Math.ceil(val);
    }
    return Math.floor(val);
}
公共双myRound(双val){
if(val<0){
返回Math.ceil(val);
}
返回数学楼层(val);
}
您也可以尝试以下方法:

public static void main(String[] args) {
        Double myDouble = -3.2;
        System.out.println(myDouble.intValue()); //Prints -3

    }


它应该很容易在Java中实现。

Math.floor()
向-ve无穷大而不是零舍入。如果结果符合
int
,这可能是一个很大的if.@aix足够正确,但是您也不能保证存在一个可以表示该数字的双精度。但是是的,这是对我的吹毛求疵;)如果结果适合
int
,这可能是一个很大的问题,为什么要转换为
int
并将其存储在
long
中?转换为
long
-1:如果浮点数太大或太小,无法用64位整数表示,则此操作将失败。无论是
int
还是
long
,问题只会转移。这样的数字在日常使用中可能并不常见,但这只会使查找与溢出/下溢相关的错误变得更加困难。
BigDecimal
可以表示
float
double
可以表示的所有值吗?BigDecimal是java中表示数字的方法,因此使用它是有意义的BigDecimal@Oli对BigDecimal是一种任意精度的十进制,它可以表示浮点和双精度的所有值。@mprabhat
BigDecimal
不是“在Java中表示数字的方式”。这是其中的一个。这当然是过分的,特别是当一个原语可以做得很好的时候。+1:到目前为止,唯一的答案是做正确的事情(AFAICS)。
x-x%1
(仅限Java)特别是,要解决OP的需要,它与该楼层中的楼层不同,需要遵循正确的数学行为。
public static void main(String[] args) {
        Double myDouble = -3.2;
        System.out.println(myDouble.intValue()); //Prints -3

    }
y=sign(x)*floor(abs(x))
y=sign(x)*round(abs(x)-0.5)