• 取整、保留小数等数字处理方法


    问题描述:

    后台数据类型为decimal a,在前台页面中显示时需要显示为整数。

    我的做法是Convert.ToInt32(a),这样做是强制把内容转换为整数,改变了数据本来的意义。

    最终做法是Math.Round(a,0),将a的小数值舍入为指定精度。


    1.先看Math.Round()方法,是将值舍入到最接近的整数或指定的小数位数。

    MSDN上可以看到有这些重载的方法。

    Math.Round(3.44, 1); //Returns 3.4.
    Math.Round(3.45, 1); //Returns 3.4.
    Math.Round(3.46, 1); //Returns 3.5.  MSDN上给出的示例
    Math.Round(3.55, 1); //Returns 3.6 我加的一个示例

    可以看到这个“舍入”不是四舍五入,而是银行家舍入:四舍六入五取偶法。规则是当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。


    2.再看 Convert.ToInt32(value d)方法,是一种强制类型转换。

    如果 value 为两个整数中间的数字,则返回二者中的偶数,即 4.5 转换为 4,而 5.5 转换为 6,同样也是银行家舍入。


    总结:同样是对decimal取整,二者区别是:前者只是将小数点舍入到指定精度,没有改变数据的类型,而后者进行强制转换改变了数据的类型。


    提到了强制类型转换为整数,(int)方法和Convert.ToInt32(),可以看到如下区别:

    (int)方法直接截取整数部分,而Convert.ToInt32()采取银行家舍入方式。

    另还有int.Parse(string s)方法,参数必须为string类型,而且该string类型的参数,在实际意义上也应为int类型,

  • 相关阅读:
    【JZOJ 4274】【NOIP2015模拟10.28B组】终章-剑之魂
    【JZOJ 4281】【NOIP2015模拟10.29A组】三色树
    【Luogu P2824】[HEOI2016/TJOI2016]排序
    【Luogu P5490】【模板】扫描线
    【Luogu P2502】[HAOI2006]旅行
    【Luogu P1629】 邮递员送信
    【Luogu P4047】[JSOI2010]部落划分
    【Luogu P4071】[SDOI2016]排列计数
    【Luogu P2508】 [HAOI2008]圆上的整点
    【Luogu P1102】A-B 数对
  • 原文地址:https://www.cnblogs.com/wangsir1992/p/7083612.html
Copyright © 2020-2023  润新知