首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能向上取整而不是向下取整?

怎样才能向上取整而不是向下取整?
EN

Stack Overflow用户
提问于 2010-11-12 16:57:57
回答 4查看 9.4K关注 0票数 11

我正在执行一些计算并将结果插入到数据库中。

我的问题是,我得到的答案似乎是向下取整而不是向上取整。这可能看起来并不重要,但在大量销售的过程中,美分开始增加!

代码语言:javascript
复制
Decimal pubCut = rrp * (percentageCutD / 100);
Decimal retCut = rrp * retailerCut;
Decimal edcut = rrp * edpercentage;

老实说,我对数字一窍不通,整个数学函数都是我在大学里尽量避免的。谁能告诉我怎样才能使这些数字向上取整而不是向下取整?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-12 17:01:47

使用Math.Ceiling()方法。

代码语言:javascript
复制
double[] values = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6};
Console.WriteLine("  Value          Ceiling          Floor\n");
foreach (double value in values)
   Console.WriteLine("{0,7} {1,16} {2,14}", 
                     value, Math.Ceiling(value), Math.Floor(value));
// The example displays the following output to the console:
//         Value          Ceiling          Floor
//       
//          7.03                8              7
//          7.64                8              7
//          0.12                1              0
//         -0.12                0             -1
//          -7.1               -7             -8
//          -7.6               -7             -8
票数 15
EN

Stack Overflow用户

发布于 2010-11-12 17:01:21

你的问题是

代码语言:javascript
复制
(percentageCutD / 100)

因为100是一个整数,所以它将执行整数除法,这样150/100就变成了1。你可以通过确定100是一个小数来解决这个问题,因为你想要一个小数作为结果。将代码更改为。

代码语言:javascript
复制
(percentageCutD / 100D)

但是,如果您总是希望将值四舍五入,甚至像1.1那样向上舍入到2,那么您将不得不使用Math.Ceiling来实现。如果您出于某种原因想要避免使用Math类(我不明白您为什么要这样做),您可以在结果中添加1并将其转换为int,从而有效地向上舍入到最接近的整数。

票数 5
EN

Stack Overflow用户

发布于 2010-11-12 17:36:28

.NET的Math.Round函数使用了一些通常被称为银行家舍入的东西,其工作原理是将.5舍入到最接近的偶数,即22.5 = 22和23.5 = 24。这在舍入时提供了更均匀的分布。

还值得注意的是,SQL服务器不使用银行家舍入

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4162957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档