2008-11-18 91 views
4

在C#中,如果我想将double(1.71472)转换为int,那么我将得到答案2.如果我使用intValue()方法在Java中执行此操作,我得到1作为答案。将Double转换为Int时的不同答案 - Java与.Net

Java是否会降低转换?

为什么在Java API文档具有即

返回指定 数为int值约为其类,信息很少。这可能涉及到 四舍五入或截断。

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

回答

13

当您使用转换转换时,Java从一个浮点型变为一个整型时,向0调整为零,并且C#也是如此。这是Convert.ToInt32舍入:

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

详细信息可在Java Language Specification找到。需要注意的是,虽然在Number引用文档离开选项打开的子类,在具体的拳击类型的文档,如Double,是明确的关于实施:

返回此Double的值作为 INT(通过转换成键入int)。

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

7

Java从一个浮点到一个整数类型缩小时,趋近于零。

有关于Java Language Specification中的一般规则的更多文档。注意,尽管在Number文档离开选项打开的子类,在具体的拳击类型的文档更清楚了:

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

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

3

Jon Skeet是正确的,但要注意的是.NET使用Banker's Rounding作为舍入算法。当你处于偶数整数之间的一半时。

+0

事实上,它比这更糟糕。 .NET在大多数情况下使用银行家舍入,但不是全部(格式字符串是使用常见舍入的一种情况)。您还可以更改.NET 2.0及更高版本中使用的舍入方法。 – 2008-11-18 23:39:36