【问题标题】:Convert.ToDouble exception: Input string was not in a correct formatConvert.ToDouble 异常:输入字符串的格式不正确
【发布时间】:2020-08-12 15:59:51
【问题描述】:

当我尝试将 1.1 之类的数字转换为双精度时,我得到一个异常:“输入字符串的格式不正确。”我不知道为什么会这样,因为我给出的输入是正确的,而我要转换的变量是双精度的。下面是代码:

控制器创建方法:

        [ValidateAntiForgeryToken]
        public ActionResult Create(IFormCollection collection)
        {
            try
            {
                Riskanalysis riskanalysis = new Riskanalysis()
                {
                    dateCreation = Convert.ToDateTime(collection["dateCreation"]),
                    userId = collection["userId"],
                    categoryId = Convert.ToInt32(collection["categoryId"]),
                    zoneId = Convert.ToInt32(collection["zoneId"]),
                    equipmentId = Convert.ToInt32(collection["equipmentId"]),
                    taskId = Convert.ToInt32(collection["taskId"]),
                    activity = collection["activity"],
                    action = collection["action"],
                    descriptionPotentialRisk = collection["descriptionPotentialRisk"],
                    dangerId = Convert.ToInt32(collection["dangerId"]),
                    consequenceId = Convert.ToInt32(collection["consequenceId"]),
                    dangerousEnergiesId = Convert.ToInt32(collection["dangerousEnergiesId"]),
                    preventionMeasures = collection["preventionMeasures"],
                    safetyProcedures = collection["safetyProcedures"],
                    preSeriousness = Convert.ToDouble(collection["preSeriousness"]),
                    preProbability = Convert.ToDouble(collection["preProbability"]),
                    preExposure = Convert.ToDouble(collection["preExposure"]),
                    preRiskDegree = Convert.ToDouble(collection["preRiskDegree"]),
                    preRiskCategory = Convert.ToDouble(collection["preRiskCategory"]),
                };

                DanoneRiskanalysisManager rm = new DanoneRiskanalysisManager();
                rm.InsertRiskanalysis(riskanalysis);

                return RedirectToAction(nameof(Create));
            }
            catch (Exception e)
            {
                return View();
            }
        } 

输入字段:

                <div class="form-group">
                    <label asp-for="preSeriousness" class="control-label">Pre seriousness:</label>
                    <input asp-for="preSeriousness" class="form-control" type="text" required/>
                    <span asp-validation-for="preSeriousness" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="preProbability" class="control-label">Pre probability:</label>
                    <input asp-for="preProbability" class="form-control" type="text" required/>
                    <span asp-validation-for="preProbability" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="preExposure" class="control-label">Pre exposure:</label>
                    <input asp-for="preExposure" class="form-control" type="text" required/>
                    <span asp-validation-for="preExposure" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="preRiskDegree" class="control-label">Pre risk degree:</label>
                    <input asp-for="preRiskDegree" class="form-control" type="text" required/>
                    <span asp-validation-for="preRiskDegree" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="preRiskCategory" class="control-label">Pre risk category:</label>
                    <input asp-for="preRiskCategory" class="form-control" type="text" required/>
                    <span asp-validation-for="preRiskCategory" class="text-danger"></span>
                </div>

任何人都知道可能是什么原因或在哪里寻找?

已经谢谢了!

【问题讨论】:

  • 你检查过区域设置了吗?,可能数字格式不使用“。”作为小数分隔符,请尝试输入“,”而不是“。”
  • 这解决了它,非常感谢!可能是因为我住在比利时,他们使用“,”而不是“。”?
  • 很高兴听到语言环境 CultureInfo.InvariantCulture 在这种情况下可以帮助您。此外,在解析像您这样的对象类型时,我也遇到了类似的错误,并且由于集合较大,几乎难以跟踪。当然,我建议在需要时使用Double.TryParse
  • @henocsalinas 您应该将其作为答案,AVandijck 会将其标记为正确答案
  • 是的,我正在考虑使用 Double.TryParse,但是我必须为每个输入创建一个 int 变量还是我弄错了?

标签: c# asp.net-mvc string exception double


【解决方案1】:

你检查过语言环境了吗?,可能数字格式不使用“。”作为小数分隔符,请尝试输入“,”而不是“。”

有关更多信息,请参阅: support.microsoft

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多