当前位置:操作系统 > Unix/Linux >>

C#中的四舍五入方法、C#中获取时间戳(UnixTime)的方法

如果问C#程序员,四舍五入方法是怎么写的。很多人上来就会轻而易举的写上一个Math.Round()方法。但却不知,其中可悲的奥妙之处!
试写出下列计算结果:
  Math.Round(0.5)
  Math.Round(1.5)
  肯定有一部分人会写,计算结果为1和2。
  那就大错特错了!事实证明,这两个表达式的结果分别为0和2!这就是很多程序的BUG所在。
  细心的程序员们可以看一下MSDN中对Math.Round(Decimal)方法的描述,其中对于返回值的描述如下:
    返回值
类型:System.Decimal
最接近参数 d 的整数。如果 d 的小数部分正好处于两个整数中间,其中一个整数为偶数,另一个整数为奇数,则返回偶数。
  这就已经充分解释了,为什么上面的两个表达式的返回值分别为0和2。也证明了简单的Math.Round(Decimal)方法无法实现四舍五入的功能!
  .NET中的Math.Round(),还提供另外一些重载方法,其中一个是Math.Round(Decimal, MidpointRounding)方法,通过这个方法,可以实现对十进制小数的四舍五入。方法如下:
    Math.Round(Decimal, MidpointRounding.AwayFromZero)
    大功告成!让我们的程序告别BUG!
------------------------------------------------------------------------------------------------------------------------------------------
  .Net中没有封装获取时间戳(UnixTime,相对于1970年1月1日凌晨的毫秒数)的方法。因此本人写了如下方法实现。
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));

DateTime nowTime = DateTime.Now;

long unixTime = (long)Math.Round((nowTime - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero);

 

   Eat to live, but do not live to eat.
 

 作者  张银

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,