在 C# 中,如果我想将 double (1.71472) 转换为 int,那么我会得到答案 2。如果我在 Java 中使用 intValue() 方法执行此操作,我会得到 1 作为答案。
Java 是否对转换进行舍入?
为什么 Java API 文档没有关于他们的类的信息,即
以 int 形式返回指定数字的值。这可能涉及舍入或截断。
有关四舍五入的更多信息会有所帮助!
当从浮点类型缩小到整数类型时,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
,您可以指定八种不同的舍入策略之一。
当从浮点类型缩小到整数类型时,Java 会向零舍入。
Java 语言规范中有更多关于一般规则的文档。请注意,虽然中的文档Number
为子类保留了选项,但有关具体装箱类型的文档更加明确:
将此 Double 的值作为 int 返回(通过强制转换为 int 类型)。
使用BigDecimal时,您可以指定八种不同的舍入策略之一。
Jon Skeet 是正确的,但其他需要注意的是 .NET 使用Banker's Rounding作为其舍入算法。当您在舍入到偶数整数之间时。