java 时间取整_在Java中朝零取整

如何将Java取整为零?

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

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

x-x%1(仅在Java中)

我不认为标准库具有这样的功能。

问题是,您要问的是非常不同的行为(从数学上来说),具体取决于数字是大于还是小于0(即四舍五入为负值,四舍五入为正值)

可以使用以下方法:

public double myRound(double val) {

if (val < 0) {

return Math.ceil(val);

}

return Math.floor(val);

}

+1:到目前为止,唯一做正确的事情的答案(AFAICS)。

像这样长时间投放:

float x= 1.9;

long y = (long)x;

这会将正数和负数都舍入为零。

如果结果适合int,则如果int

为什么要转换为int并将其存储在long中?强制转换为long。

+1:long y = (long) x;可能比使用(int)更好

-1:如果浮点数太大或太小而无法用64位整数表示,则此操作将失败。无论是int还是long,问题都只会转移。这样的数字在日常使用中可能并不常见-但这只会使查找与上溢/下溢相关的错误更加困难。

使用RoundingMode.DOWN,它趋于零。

范例:

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());

BigDecimal可以代表float或double可以代表的所有值吗?

BigDecimal是用Java表示数字的方式,因此使用BigDecimal有意义

@Oli是的。 BigDecimal是任意精度的十进制数,它可以表示float和double can等所有值。

@mprabhat BigDecimal不是用Java表示数字的方式。它是其中之一。

当然,这太过分了,特别是当一个原始函数就可以了。

只是将其转换为int会为您做到这一点?

编辑:如果您想保留一个双,这应该足够简单地工作:

if (val < 0)

return -Math.floor(-val);

else

return Math.floor(val);

而对于只想要分支免费代码并觉得更聪明的人来说:

long tmp = Double.doubleToLongBits(val);

tmp >>>= 63;

return Math.floor(val) + tmp;

如果结果适合int,如果int可能很大。

@aix足够正确,但是您也不能保证存在一个可以代表数字的双精度型。但是,那是我的挑剔;)

y=sign(x)*floor(abs(x))

要么

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

它应该易于用Java实现。

您也可以尝试以下操作:

public static void main(String[] args) {

Double myDouble = -3.2;

System.out.println(myDouble.intValue()); //Prints -3

}

BigDecimal提供许多舍入选项。

尤其是,解决OP需求将是" DOWN",这与FLOOR不同,因为FLOOR遵循正确的数学行为。

好像您想始终向下舍入?您可以改用Math.floor

public static double floor(double a)

Returns the largest (closest to positive infinity) double value that

is not greater than the argument and is equal to a mathematical

integer. Special cases:

Math.floor()取整为-ve无穷大,而不是零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值