c# 四舍五入问题

maycxd 2012-02-07 04:48:20
比如说Math.Round(0.00145, 4, MidpointRounding.AwayFromZero),0.00145应该是0.0015和0.0014的中间值,取绝对值较大
值的话,按理应该是0.0015,但是结果却是0.0014,我测试很多数据都是对的,唯独这个数就是不对,是我理解错了还是VS2005的
BUG,求大神分析下~!
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
JianDom 2012-02-07
  • 打赏
  • 举报
回复
以前网上找的 中国式四舍五入

public static double ChinaRound(double value, int decimals)
{
if (value < 0)
{
return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);
}
else
{
return Math.Round(value, decimals, MidpointRounding.AwayFromZero);
}
}

maycxd 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stonespace 的回复:]
这是因为误差,double型数据不是整数,不绝对精确,所以你的0.00145可能表示成0.00144999999999999,四舍五入就成为0.0014了,
[/Quote]
有点纠结而已,就是唯独这数据有问题,呵呵
dalmeeme 2012-02-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 stonespace 的回复:]
这是因为误差,double型数据不是整数,不绝对精确,所以你的0.00145可能表示成0.00144999999999999,四舍五入就成为0.0014了,
[/Quote]
同意
dalmeeme 2012-02-07
  • 打赏
  • 举报
回复
可以这样:
double d = (double)Math.Round((decimal)0.00145, 4, MidpointRounding.AwayFromZero);
Response.Write(d);
stonespace 2012-02-07
  • 打赏
  • 举报
回复
这是因为误差,double型数据不是整数,不绝对精确,所以你的0.00145可能表示成0.00144999999999999,四舍五入就成为0.0014了,

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧