将double转换为int,是圆形还是仅剥离数字?

cos*_*ari 22 c# double int casting rounding

用双精度执行一些计算,然后需要将其转换为int.所以我有一个简单的问题,当一个双重说7.5到一个int时,它将返回7.

这是四舍五入点后舍入或只是条带化的产物吗?

如果它是一个四舍五入的产品,它是否很聪明,即0.1到0.5它向下舍入,0.6到0.9它向上舍入?

干杯

Den*_*aub 38

它不会舍入,只返回小数点前的整数部分.

参考(感谢Rawling):显式数字转换表

您可以通过编写简单的测试来自己尝试这样的简单问题.以下测试(使用NUnit)将通过,因此可以回答您的问题:

[Test]
public void Cast_float_to_int_will_not_round_but_truncate
{
    var x = 3.9f;
    Assert.That((int)x == 3); // <-- This will pass
}
Run Code Online (Sandbox Code Playgroud)


Tyl*_*sen 13

假设它倒了下来,不要被愚弄.它删除了十进制并纯粹返回double的整数部分.这对于负数是很重要的,因为从2.75向下舍入给出2,但从-2.75向下舍入给出-3.转换不向下舍入所以(int)2.75给出2,但(int)-2.75给你-2.

double positiveDouble = 2.75;
double negativeDouble = -2.75;

int positiveInteger = (int) positiveDouble;
int negativeInteger = (int) negativeDouble;

Console.WriteLine(positiveInteger + " = (int)" + positiveDouble);
Console.WriteLine(negativeInteger + " = (int)" + negativeDouble);

Console.ReadLine();

//Output: 2 = (int)2.75
//        -2 = (int)-2.75
Run Code Online (Sandbox Code Playgroud)


Ice*_*ind 9

简单地投射只剥离小数点以外的所有内容.要向上或向下舍入,可以使用Math.Round()方法.这将向上或向下舍入,并提供如何在中途做什么的参数.您还可以使用Math.Floor()Math.Ceiling()方法在转换之前隐式向上舍入或向下舍入.这里有些例子:

double num1 = 3.5;
double num2 = 3.2;
double num3 = 3.9;

(int)num1 // returns 3;
(int)num2 // returns 3;
(int)num3 // returns 3 also;
(int)Math.Round(num1) // returns 4
(int)Math.Round(num2) // returns 3
(int)Math.Round(num3) // returns 4
(int)Math.Floor(num1) // returns 3
(int)Math.Floor(num2) // returns 3
(int)Math.Floor(num3) // returns 3
(int)Math.Ceiling(num1) // returns 4
(int)Math.Ceiling(num2) // returns 4;
(int)Math.Ceiling(num3) // returns 4;
Run Code Online (Sandbox Code Playgroud)


小智 5

它取整数部分

double d = 0.9;
System.Console.WriteLine((int)d);
Run Code Online (Sandbox Code Playgroud)

结果是0