C# PCL中的数学圆函数

C# PCL中的数学圆函数,c#,portable-class-library,C#,Portable Class Library,我正在将我的功能从普通类库转换为PCL。 在普通的c#类库中,我们可以将三个参数传递给math.Round函数,使十进制数四舍五入。 之前我们使用了如下的数学圆 Math.Round(value,digit, MidpointRounding.AwayFromZero) . 但在PCL中,我可以看到“middpointrounding.AwayFromZero”枚举不可用。我可以在PCL中执行相同的操作吗 我将PCL设置为“.Net framework 4.5”、“Xamarin.IOs”、“

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

Math.Round(value,digit, MidpointRounding.AwayFromZero) .
但在PCL中,我可以看到“middpointrounding.AwayFromZero”枚举不可用。我可以在PCL中执行相同的操作吗


我将PCL设置为“.Net framework 4.5”、“Xamarin.IOs”、“Xmarain.Android”和Silverlight 5。实际上,我不需要支持Silverlight 5的PCL。但我无法删除此Silverlight 5支持。

您确定已正确检查它吗?根据需要,它应该在PCL中得到支持

在版本信息下,您可以阅读

可移植类库

在:可移植类库中支持

否则,如果您只需要四舍五入到整数,而不需要特定的小数位数,则有一个简单的技巧可以在不使用任何四舍五入函数的情况下实现这一点:

roundedValue = (int)(valueToRound + 0.5)
如果该值在
.5
或更大范围内结束,则它将被求和为下一个整数,而转换为
int
将删除小数点。否则,对于
.499..
和更小的值,这将是不够的,再次转换为
int
小数位数的切分。

根据此方法,PCL中支持

.NET框架

支持于:4.5.1、4.5、4、3.5、3.0、2.0

.NET Framework客户端配置文件

在:4、3.5 SP1中支持

可移植类库

可移植类库中支持

用于Windows应用商店应用的.NET

在Windows 8中受支持

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

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

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

因此,您在PCL项目中看到的是一个自动结果。它保护您不使用在某个目标平台上不可用的类和方法,从而使您的程序失败,只需隐藏它们


你得用现有的东西凑合着用。您将获得中点舍入.ToEven,默认值。一种可能的解决方法是乘以10的幂,再加上0.5,四舍五入到0位,然后再除法。

你确定吗?MSDN将其列为在PCL中可用。最有可能的是,PCL的可用性取决于您的目标平台。据我所见,Silverlight或Windows Phone 8.0之前版本中没有包含
middpointrounding
参数的
Math.Round
重载。如果您对目标定位(例如,.NET Framework、Windows Store和Windows Phone 8)没有异议,那么您可能能够在代码中加入
middpointrounding
Math.Round
重载。是的,Anders Gustafsson。。我想是的。我的目标也是silverlight 5。但是当我试图删除silverlight 5时,它说它支持所有其他类似的功能。我选择了“Xmarin.Android”,xamarin.IOs“和dotnet framework 4.5.yes
0.7+0.5
1.2
1.2
强制转换为
int
1
但当然不能舍入到不同的小数位数,只能舍入到整数