SQL server和C#,VB.net中Round方法的差异

1 篇文章 0 订阅
0 篇文章 0 订阅

在C#中使用Math.Round(1.25, 1),期望得到1.3,结果却是1.2。
1.因为Math.Round方法并不是遵循四舍五入的原则,而是采用“四舍六入五成双”这种方式,若需要舍入到的位的后面"小于5"或"大于5"的话,按通常意义的四舍五入处理.若"若需要舍入到的位的后面"等于5",则要看舍入后末位为偶数还是奇数,举例:
Math.Round(1.25, 1) = 1.2 因为5前面是2,为偶数,所以把5舍去不进位
Math.Round(1.35, 1) = 1.4 因为5前面是3,为奇数,所以进位
而0也看成为偶数,所以Math.Round(0.5, 0) = 0


2.从统计学的角度,"四舍六入五成双"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均.而不是像四舍五入那样逢五就入,导致结果偏向大数.
例如:1.15+1.25+1.35+1.45=5.2,若按四舍五入取一位小数计算
1.2+1.3+1.4+1.5=5.4
按"四舍六入五成双"计算,1.2+1.2+1.4+1.4=5.2,舍入后的结果更能反映实际结果

3.在C#和VB.net,都是"四舍六入五成双"原则,而 Sql Server 是简单的"四舍五入"。
但是如果单独对一个数进行四舍五入,这种方法明显是不行的,因为Math.Round(0.5, 0) = 0,所以需要另外自己写一个方法去实现,下面是在我们项目中用的方法,供大家参考:
C#代码 
  1. public staticdecimal Round(decimal d,int decimals)  
  2. {  
  3. decimal tenPow = Convert.ToDecimal(Math.Pow(10, decimals));  
  4. decimal scrD = d * tenPow + 0.5m;  
  5. return (Convert.ToDecimal(Math.Floor(Convert.ToDouble(scrD))) / tenPow);  

另外,如果小数位足够长,也可以Decimal.Round这个方法,举例:
Decimal.Round(1.25, 1) = 1.2
但是如果是 Decimal.Round(1.251, 1) = 1.3
所以采用下面的方法也能达到四舍五入的效果
C#代码 
  1. public staticdecimal MyDecimalRound(decimal d,int decimals)  
  2. {  
  3. d = d + 0.000000000000001m;  
  4. return Decimal.Round(d, decimals);  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用SQL Server数据库和VB.NET可以很好地设计和开发一个外卖系统。下面是使用这两个工具进行设计的流程简述: 1. 数据库设计: 首先,创建一个名为"顾客"的表,用于存储顾客的信息,包括顾客ID、姓名、地址等。另外,可以创建一个名为"店铺"的表,用于存储店铺的信息,包括店铺ID、名称、地址等。接着,创建一个名为"菜品"的表,用于存储菜品的信息,包括菜品ID、名称、价格、店铺ID等。最后,可以创建一个名为"订单"的表,用于存储订单信息,包括订单ID、顾客ID、菜品ID、数量、订单时间等。 2. VB.NET开发: 首先,创建一个主界面,用于显示多个店铺的菜品。可以使用DataGridView控件来展示店铺、菜品和价格等信息,并为每个菜品提供一个“加入购物车”的按钮。当用户点击按钮时,可以将菜品信息添加到一个购物车表。 其次,创建一个购物车界面,用于展示用户已选择的菜品。同样使用DataGridView来显示菜品的信息,并为每个菜品提供一个“删除”按钮,以便用户删除不需要的菜品。 接着,创建一个下单界面,用户可以在这个界面上选择送餐地址,并确认订单。当用户点击“下单”按钮时,应获取用户的ID和选定的菜品等信息,并将订单写入到订单表。 最后,可以创建一个订单查询界面,用于查询和展示用户的历史订单。用户可以根据订单日期、订单状态等条件进行查询,并可查看详细的订单信息。 总结: 通过SQL Server数据库和VB.NET的组合设计,可以实现一个外卖系统的功能。从顾客浏览菜品、加入购物车、下单,到查询历史订单,每个环节都需要在数据库进行相应的操作,并在VB.NET处理用户的操作和界面展示。这样的系统可以满足用户对外卖服务的需求,并提供方便快捷的点餐体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值