Java trunc()方法等价物

Java trunc()方法等价物,java,math,rounding,Java,Math,Rounding,java.lang.Math类有ceil()、floor()和round()方法,但没有trunc()方法 同时,我在实践中看到,.intValue()方法(实际上是(int)cast)完全符合我对trunc()的标准含义的期望 但是,我找不到任何具体的文档证实intValue()完全等同于trunc(),从许多角度来看,这很奇怪,例如: description“将此Double的值返回为int(按 将类型转换为int)“from” 做 不要说它“返回小数的整数部分” “数字”之类的 文章 没

java.lang.Math类有ceil()、floor()和round()方法,但没有trunc()方法

同时,我在实践中看到,.intValue()方法(实际上是(int)cast)完全符合我对trunc()的标准含义的期望

但是,我找不到任何具体的文档证实intValue()完全等同于trunc(),从许多角度来看,这很奇怪,例如:

  • description“将此Double的值返回为int(按 将类型转换为int)“from” 做 不要说它“返回小数的整数部分” “数字”之类的

  • 文章 没有说它的行为类似于trunc()

  • 我对“JavaTrunc方法”之类的搜索都没有给出答案 好像我是唯一一个搜索trunc()的人 不知道一些大家都知道的很普通的事情

我是否可以通过某种方式确认我可以安全地使用intValue()来使用“trunc”模式对小数进行取整?

因此问题变成了:将双精度转换为int是否等于截断

这个问题可能有答案。我将引用:

基元类型上的特定转换称为缩小 原语转换:

[……]

  • 浮点到字节、短、字符、整型或长
  • 双字节、短字节、字符、整型、长字节或浮点
缩小原语转换可能会丢失有关 数值的总大小,也可能会失去精度和 射程

[……]

浮点数到整数类型的缩小转换 T采取两个步骤:

  • 在第一步中,如果T是byte、short、char或int,则将浮点数转换为[…]int,如下所示:
    • 如果浮点数为NaN(§4.2.3),则转换的第一步结果为int或long 0
    • 否则,如果浮点数不是无穷大,则将浮点数四舍五入为整数值V,四舍五入 使用IEEE 754四舍五入归零模式归零(§4.2.3)。还有 两个案例:
      • 如果T是长的,并且这个整数值可以表示为长的,那么第一步的结果就是长值V
      • 否则,如果这个整数值可以表示为int,那么第一步的结果就是int值V
这在中进行了描述。

因此问题变成了:将双精度转换为整数是否等于截断

这个问题可能有答案。我将引用:

基元类型上的特定转换称为缩小 原语转换:

[……]

  • 浮点到字节、短、字符、整型或长
  • 双字节、短字节、字符、整型、长字节或浮点
缩小原语转换可能会丢失有关 数值的总大小,也可能会失去精度和 射程

[……]

浮点数到整数类型的缩小转换 T采取两个步骤:

  • 在第一步中,如果T是byte、short、char或int,则将浮点数转换为[…]int,如下所示:
    • 如果浮点数为NaN(§4.2.3),则转换的第一步结果为int或long 0
    • 否则,如果浮点数不是无穷大,则将浮点数四舍五入为整数值V,四舍五入 使用IEEE 754四舍五入归零模式归零(§4.2.3)。还有 两个案例:
      • 如果T是长的,并且这个整数值可以表示为长的,那么第一步的结果就是长值V
      • 否则,如果这个整数值可以表示为int,那么第一步的结果就是int值V

如所述。

您可以使用
floor
ceil
来实现
trunc

  public static double trunc(double value) { 
      return value<0 ? Math.ceil(value) : Math.floor(value);
  }

您可以使用
floor
ceil
来实现
trunc

  public static double trunc(double value) { 
      return value<0 ? Math.ceil(value) : Math.floor(value);
  }

JLS中有相当详尽的细节;描述中缺少了什么?“这正是我从trunc()的标准含义中所期望的”也许值得定义您期望
trunc
做什么。我认为他指的是精度损失问题,就像浮动一样。文档的参考Java语言规范第5.1.3节缩小原语转换范围;这应该可以明确地解释“将一个
double
转换为
int
”意味着什么。是的!在我看来,“向零进发”==truncateThere是JLS中非常详尽的细节;描述中缺少了什么?“这正是我从trunc()的标准含义中所期望的”也许值得定义您期望
trunc
做什么。我认为他指的是精度损失问题,就像浮动一样。文档的参考Java语言规范第5.1.3节缩小原语转换范围;这应该可以明确地解释“将一个
double
转换为
int
”意味着什么。是的!按照我的理解,“向零进位”==truncate