【问题标题】:Casting issue when rounding double values舍入双精度值时的转换问题
【发布时间】:2015-05-21 07:22:14
【问题描述】:

在我的剃刀视图中,我使用以下代码将模型值“预算”四舍五入到最接近的整数值。模型值“预算”是double? 值。但是在为roundMyPrice 分配最终值时,Visual Studio 会出错。

为什么我不能使用double? 值作为参数?我该如何克服这个问题?

@{
    double? budget = item.Budget;
    double? myPrice = budget / count;
    double roundMyPrice = Math.Round(myPrice, MidpointRounding.AwayFromZero);
}

【问题讨论】:

  • 真的有double? 数据类型吗?
  • @Stuart: double?Nullable<double> 的简写。

标签: c# asp.net-mvc razor rounding


【解决方案1】:

double?(或Nullable<double>)可以是null,记住。

变体 1

double? myPrice = budget / count;
double roundMyPrice;
if (myPrice.HasValue)
{
    roundMyPrice = Math.Round(myPrice.Value, MidpointRounding.AwayFromZero);
}
else
{
    // value is not presented
}

变体 2

MSDN:GetValueOrDefault

如果您的逻辑null 为0,您可以使用以下代码:

double? myPrice = budget / count;
double roundMyPrice = Math.Round(myPrice.GetValueOrDefault(), MidpointRounding.AwayFromZero);

【讨论】:

  • 在这种情况下,检查budget 是否有价值会更有意义。
【解决方案2】:

Math.Round 中的double? 没有重载,因此您需要传递 double 作为参数。您还需要考虑double?null 的情况。最后,您需要将Math.Round 的结果转换为double?

double? budget = item.Budget;
double? myPrice = budget / count;
double? roundMyPrice = myPrice.HasValue ? (double?) Math.Round(myPrice.Value, MidpointRounding.AwayFromZero) : null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多