PCL中的Math.Round函数

时间:2014-03-05 10:22:46

标签: c# portable-class-library

我正在将我的功能从普通的类库转换为PCL。 在普通的c#类库中,我们可以将三个参数传递给math.Round函数来舍入十进制数。 以前我们使用了math.Round,如下面的

Math.Round(value,digit, MidpointRounding.AwayFromZero) .

但在PCL中我可以看到“MidpointRounding.AwayFromZero”枚举不可用。我可以在PCL中执行相同的操作吗?

我的目标是我的PCL为“.Net framework 4.5”,“Xamarin.IOs”“Xmarain.Android”和Silverlight 5.实际上我不需要支持PCl到silverlight 5.但是我无法删除这个Silverlight 5支持。

3 个答案:

答案 0 :(得分:3)

这是设计,Silverlight就是挂断。它属于.NETCore子集,其他框架如Phone7和.NET Compact Framework都在该集合中。主要目标是使.NET安装尽可能紧凑,因为当用户访问需要它的网站(如Netflix)时,Silverlight可以在10秒或更短的时间内下载运行时。当然,这只能通过从CLR和框架中减去大块来实现,你想要使用的Math.Round()重载被切断到达那里。

所以你在PCL项目中看到的是自动结果。它可以保护您免受使用其中一个目标平台上不可用的类和方法的影响,从而使您的程序失败,只需隐藏它们即可。

你必须使用你所拥有的东西。你会得到MidpointRounding.ToEven,默认。一个可能的解决方法是乘以10的幂,加0.5,舍入到0位,然后再划分。

答案 1 :(得分:1)

你确定你检查过正确吗?根据{{​​3}},它应该在PCL中得到支持

版本信息下的

您可以阅读

  

便携式类库

     

支持:可移植类库

否则有一个简单的技巧来实现相同而没有任何舍入函数,如果你只需要舍入到整数而不是特定的小数位:

roundedValue = (int)(valueToRound + 0.5)

如果值结束时.5或更多,它将汇总到下一个整数,而强制转换为int会截断小数位。否则,对于.499..和更小的值,它将是不够的,并再次转换为int小数点的缩放。

答案 2 :(得分:0)

根据MSDN,PCL支持此方法。

  

.NET Framework

     

受支持者:4.5.1,4.5,4,3.5,3.0,2.0

     

.NET Framework客户端配置文件

     

受支持者:4,3.5 SP1

     

便携式课程库

     

支持:可移植类库

     

.NET for Windows Store应用

     

支持:Windows 8

我创建了一个小型测试项目(PCL),这对我有用:

decimal d = Math.Round(0.555555M, 2, MidpointRounding.AwayFromZero);