lot*_*max 3 c# double int decimal type-conversion
我想显示转换double为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();
}
Run Code Online (Sandbox Code Playgroud)
结果为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");
Run Code Online (Sandbox Code Playgroud)
正在使用零舍入
第二个:
Math.Round(value, 0)
Run Code Online (Sandbox Code Playgroud)
正在使用Bankers Rounding
银行家舍入将四舍五入到最接近的偶数 - 因此结果将为100.远离零舍入将舍入到101(101比零更"远离零")
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |