将Double转换为Int时的不同答案 - Java vs .Net

时间:2008-11-18 20:37:59

标签: java .net rounding

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

Java是否会对转化进行舍入?

为什么Java API文档有关于其类的信息很少,即

  

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

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

3 个答案:

答案 0 :(得分:13)

当从浮点缩小到整数类型时,Java会向零舍入 - 当使用转换转换时,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时,您可以指定八种不同的舍入策略之一。

答案 1 :(得分:7)

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

Java Language Specification中有关于一般规则的更多文档。请注意,虽然Number中的文档为子类打开了选项,但有关具体拳击类型的文档更明确:

  

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

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

答案 2 :(得分:3)

Jon Skeet是正确的,但需要注意的是.NET使用Banker's Rounding作为舍入算法。当你在往中等整数的中间位置时。