【问题标题】:Math.Round Function in PCLPCL 中的 Math.Round 函数
【发布时间】:2014-03-05 20:40:52
【问题描述】:

我正在将我的功能从普通类库转换为 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 支持。

【问题讨论】:

  • 你确定吗? MSDN 将其列为 PCL 中可用的。
  • 很可能,PCL 的可用性取决于您所针对的平台。据我所知,在 8.0 之前的 SilverlightWindows Phone 中没有包含 MidpointRounding 参数的 Math.Round 重载。如果您可以确定目标,例如 .NET FrameworkWindows StoreWindows Phone 8,则您可能可以合并 @ 987654324@ 代码中 Math.Round 的重载。
  • 是的 Anders Gustafsson .. 我想是的。我也瞄准 silverlight 5。但是当我尝试删除 silverlight 5 时,它说它支持所有其他类似的功能。我选择了“ Xmarin.Android" ,xamarin.IOs" 和 dotnet 框架 4.5。

标签: c# portable-class-library


【解决方案1】:

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

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

您将不得不利用现有的资源。您将获得默认值 MidpointRounding.ToEven。一种可能的解决方法是乘以 10 的幂,加上 0.5,四舍五入到 0 位,然后再除。

【讨论】:

    【解决方案2】:

    您确定检查正确吗?根据MSDN,PCL 应该支持它

    您可以在版本信息下阅读

    可移植类库

    支持:可移植类库

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

    roundedValue = (int)(valueToRound + 0.5)
    

    如果值在.5 或更多时结束,它将求和到下一个整数,并且转换为int 会去掉小数位。否则,对于 .499.. 和更小的值,这将是不够的,并且再次转换为 int 的小数位。

    【讨论】:

    • 是的 0.7 + 0.51.2; 1.2 转换为 int1 但当然你不能四舍五入到不同的小数位数,只能到整数
    【解决方案3】:

    根据MSDN,PCL 支持此方法。

    .NET 框架

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

    .NET Framework 客户端配置文件

    支持:4、3.5 SP1

    可移植类库

    支持:可移植类库

    .NET 用于 Windows 应用商店应用

    支持:Windows 8

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多