加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将double转换为int可返回意外结果

发布时间:2020-12-15 23:37:39 所属栏目:百科 来源:网络整理
导读:我想将数字转换加倍显示为int.但我很困惑.这是我的代码. 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
我想将数字转换加倍显示为int.但我很困惑.这是我的代码.

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();
}

结果为100,5 =>
101和
100

结果为100,56 =>
101和
101

结果为100,49 =>
100和
100

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

解决方法

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

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

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

第一:

value.ToString("F0");

正在使用零舍入

第二个:

Math.Round(value,0)

正在使用Bankers Rounding

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读