将double转换为int将返回意外结果

lot*_*max 3 c# double int decimal type-conversion

我想显示转换doubleint.但我很困惑.这是我的代码.

private void tbxDouble_TextChanged(object sender, EventArgs e)
{
    tbxInt.Text = Convert.ToDouble(tbxDouble.Text).ToString("F0");
    tbxInt2.Text = Math.Round(Convert.ToDouble(tbxDouble.Text),0).ToString();
}
Run Code Online (Sandbox Code Playgroud)

结果为100,5 => 101和100

结果为100,56 => 101和101

结果为100,49 => 100和100

为什么所有结果都不是101?这有什么问题?

Mic*_*lak 7

编辑:正如在评论中指出的那样 - 当我写"F0"格式化只会截断数字时,我的初始答案是错误的.正确的答案是它会圆,但它会使用其他类型的舍入称为"远离零"舍入.

我假设100,49和100,56的情况是显而易见的,所以让我们来看看100,50

首先让我们退后一步:Convert.ToDouble(tbxDouble.Text)这条线从字符串转换为带有值的double,100.50此时你已经完成了两次不同的舍入.

第一:

value.ToString("F0");
Run Code Online (Sandbox Code Playgroud)

正在使用零舍入

第二个:

Math.Round(value, 0)
Run Code Online (Sandbox Code Playgroud)

正在使用Bankers Rounding

银行家舍入将四舍五入到最接近的偶数 - 因此结果将为100.远离零舍入将舍入到101(101比零更"远离零")