【发布时间】:2020-05-08 00:06:49
【问题描述】:
在 Java 中,当 long 值转换为 double 值时,当无法进行无损转换时,将应用 IEEE754 舍入到最近舍入模式。
例如,从1L << 55 或(1L << 55) + 8 转换为double 是无损的。但是,两者之间的任何数字都不能准确地表示为double。默认情况下应用 IEEE-754 舍入到最近(连接到偶数)舍入模式。因此,(1L << 55) + 4) 或以下将向下舍入,(1L << 55) + 5 或以上将向上舍入。
标准库或番石榴中是否有任何函数允许我使用Round toward +∞ 或Round toward -∞ 模式(根据每个呼叫站点选择)将 long 转换为 double?假设没有,我如何高效地自己编写这两个函数?
【问题讨论】:
-
不,Guava 不支持这一点,但它可能应该支持。 (它支持另一个方向,例如,
DoubleMath.roundToLong。)我计划提交功能请求。 -
对于未来的读者:@LouisWasserman 归档github.com/google/guava/issues/3895。