本文介绍了自定义小数舍入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我需要使用特定规则舍入小数值。

例如:


十进制a = 1.49m -1m

十进制a = 1.5m -1m

十进制a = 1.51m -2m


我'我已经尝试过Math.Round,但值为1.5,它返回给我2,这对我的业务规则来说不是正确的。


如何解决这个问题?


提前致谢。

-

Luigi

Hi all,
I need to round a decimal value with a particular rule.
For example:

decimal a = 1.49m -1m
decimal a = 1.5m -1m
decimal a = 1.51m -2m

I''ve tried Math.Round but with the value 1.5 it returns me 2, which it is
not correct for my business rule.

How can I solve this problem?

Thanks in advance.
--
Luigi

推荐答案



我会写一个自定义舍入方法。如果你有一个非常具体的要求,这是合理的简单。在这种情况下,例如:


公共小数舍入(小数值)

{

十进制底= Math.Floor(值);

十进制上限= Math.Floor(值);

十进制中点=(楼层+上限)/ 2;

返回值< = midpoint?地板:天花板;

}


围绕这个最大的数字可能存在一些奇怪的问题小数可以存储,但如果你的应用程序

不使用那些(并且它不太可能)那么你应该没问题。


这是完全未经测试的 - 我强烈建议为它写单元

测试!


Jon

I''d write a custom rounding method. It''s reasonable simple if you have
a very specific requirement. In this case, something like:

public decimal Round (decimal value)
{
decimal floor = Math.Floor(value);
decimal ceiling = Math.Floor(value);
decimal midpoint = (floor+ceiling)/2;
return value <= midpoint ? floor : ceiling;
}

It''s possible that there will be some weird problems around the very
largest numbers that decimals can store, but if your application
doesn''t use those (and it''s unlikely to) then you should be okay.

This is completely untested though - I strongly recommend writing unit
tests for it!

Jon





尝试乘以10 *(需要的小数位数),使用math.floor或

math.ceiling,然后除以相同的数字10 *(小数位数
需要


Try multiplying by 10*(number of decimals needed), used math.floor or
math.ceiling, then divide by same number 10*(number of decimals
needed)


这篇关于自定义小数舍入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 04:18