4

在 C# 中,如果我想将 double (1.71472) 转换为 int,那么我会得到答案 2。如果我在 Java 中使用 intValue() 方法执行此操作,我会得到 1 作为答案。

Java 是否对转换进行舍入?

为什么 Java API 文档没有关于他们的类的信息,即

以 int 形式返回指定数字的值。这可能涉及舍入或截断。

有关四舍五入的更多信息会有所帮助!

4

3 回答 3

13

当从浮点类型缩小到整数类型时,Java 会向零舍入——当您使用强制转换时,C# 也是如此。就是Convert.ToInt32这样循环:

double d = 1.71472;
int x = (int) d; // x = 1
int y = Convert.ToInt32(d); // y = 2

可以在Java 语言规范中找到详细信息。请注意,虽然中引用的文档Number为子类保留了选项,但关于具体装箱类型的文档,如Double对实现是明确的:

将此 Double 的值作为 int 返回(通过强制转换为 int 类型)。

使用 时BigDecimal,您可以指定八种不同的舍入策略之一。

于 2008-11-18T20:43:19.983 回答
7

当从浮点类型缩小到整数类型时,Java 会向零舍入。

Java 语言规范中有更多关于一般规则的文档。请注意,虽然中的文档Number为子类保留了选项,但有关具体装箱类型的文档更加明确:

将此 Double 的值作为 int 返回(通过强制转换为 int 类型)。

使用BigDecimal时,您可以指定八种不同的舍入策略之一。

于 2008-11-18T20:40:14.827 回答
3

Jon Skeet 是正确的,但其他需要注意的是 .NET 使用Banker's Rounding作为其舍入算法。当您在舍入到偶数整数之间时。

于 2008-11-18T22:37:47.333 回答