【问题标题】:C# Type conversion (string to int)C# 类型转换(字符串到 int)
【发布时间】:2016-10-21 14:19:39
【问题描述】:

我目前正在遍历项目(酒店)列表,如果内容编辑器输入超过 1 晚的价格,我需要找出每晚的价格。

if (!string.IsNullOrEmpty(resource))
{
    var results = JsonConvert.DeserializeObject(resource).ToString();
    if (!string.IsNullOrEmpty(results))
    {
        var hotels = JsonConvert.DeserializeObject<ContainerHotelViewModel>(results).Hotels;

        if (daysDuration > 1)
        {
            foreach (var hotel in hotels)
            {
                string convertInt = hotel.BaseRate;
                int nightRate;
                int.TryParse(hotel.BaseRate, out nightRate);
                convertInt = nightRate / daysDuration;                    
            }
        }

        return SortHotels(hotelIds, hotels);
    }
}

所以我的理解是我已经将hotel.BaseRatestring 转换为int。因此,我将hotel.BaseRate 除以daysDuration 以获得每晚的价格是有意义的,因为它们现在都是整数。请告知我做错了什么,因为我在 foreach 循环中的最后一行代码给了我错误消息:

无法将 int 类型隐式转换为字符串。

【问题讨论】:

  • 未来的问题请提供minimal reproducible example。 IE。在这种情况下,它将是 string convertInt = 4 / 2;,它可以帮助您首先找到问题。

标签: c# string int type-conversion


【解决方案1】:

您在该行前面将 convertInt 定义为字符串:

string convertInt = hotel.BaseRate;

【讨论】:

  • 现在一切都说得通了!感谢您的帮助!
【解决方案2】:
string convertInt = hotel.BaseRate;
int nightRate;
int.TryParse(hotel.BaseRate, out nightRate);
convertInt = nightRate / daysDuration;

您首先将convertInt 声明为字符串,然后尝试将其设置为响应您的方程式。

删除第一行并设置最后一行:

int convertInt = nightRate / daysDuration;

【讨论】:

  • 感谢您的故障和帮助 J.R. :)
【解决方案3】:

您不能将 int 转换为字符串(convertInt 是此实例中的字符串)。

但是,您可以这样做:

convertInt = (nightRate / daysDuration).ToString();

另外,作为旁注: 如果您使用金钱,则不应使用 Int,就好像您将 15 英镑与 3 晚分开,答案将是 5.33 英镑 - 但 int 不能保留小数位。

【讨论】:

  • 感谢您的帮助,我会听取您关于不要使用 int 赚钱的建议!
  • 道歉@Jim41Mavs,我似乎完全忘记了你应该使用什么类型的变量。使用 Double 代替 Int :) 另外,对用于声明变量的 'var' 命令进行一些研究。
  • 请注意,在处理货币时首选小数 :) stackoverflow.com/a/1165788/6251539
【解决方案4】:

请更改您的代码。

Old code :  convertInt = nightRate / daysDuration;  

New code :  convertInt = (nightRate / daysDuration).ToString();  

请用新代码行更新您的旧代码行。

谢谢。

【讨论】:

    【解决方案5】:

    你的问题在这里:

    foreach (var hotel in hotels)
    {
        string convertInt = hotel.BaseRate;
        int nightRate;
        int.TryParse(hotel.BaseRate, out nightRate);
        convertInt = nightRate / daysDuration;  
    }
    

    convertIntstring 并且您尝试将 int 值形式保存到其中 nightRate / daysDuration。你需要使用(nightRate / daysDuration).ToString()

    所以你的台词:

    convertInt = nightRate / daysDuration;
    

    应该是:

    convertInt = (nightRate / daysDuration).ToString();
    

    【讨论】:

      【解决方案6】:

      您的错误是混淆了类型。该程序需要一个包含 int 的字符串,因此您必须在 int 上调用 .ToString() 。更好的是重构您的代码,以便在调用计算之前使用适当的类型定义所需的所有变量。顺便说一句,推荐的货币类型是Decimal。 int 的问题是不能表示它的小数单位,比如分,使用 double 会有舍入问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-16
        • 2015-10-04
        相关资源
        最近更新 更多