当试图获得它时,错误的双精度值
本文关键字:错误 双精度 | 更新日期: 2023-09-27 18:08:11
我正在开发一个ASP。NET MVC web应用程序。在我的一个视图中,我有一个列表框,其中填充了一些双值(基于我的ViewModel):
public class SuggestionViewModel
{
public bool PADP { get; set; }
public bool PremedicationPADP { get; set; }
public double NbPADP { get; set; }
public IEnumerable<SelectListItem> PADPItems { get; set; }
public bool Other { get; set; }
public SuggestionViewModel()
{
PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
}
}
当我试图通过控制器中的动作恢复这些值时,我得到了一些错误的值。例如,如果我在视图中选择'0.25',我将得到'25.0',这是完全错误的。为什么当我试图得到它的时候,它的价值发生了变化?
编辑:列表框HTML代码我得到:
<option value ="0,25">0,25</option>
<option value ="0,5">0,50</option>
<option value ="0,75">0,75</option>
<option value ="1">1</option>
我认为"正确的做法"是将整个解决方案的本地化设置为法语(根据评论,这是您使用的)。然而,这通常会引入开销并影响其他设置,例如外部组件的配置设置(例如jQueryUI, Kendo——考虑日期)。另一种解决方案是将模型的类型从double
更改为string
,并在控制器中使用目标本地化对其进行解析。
public class SuggestionViewModel
{
public bool PADP { get; set; }
public bool PremedicationPADP { get; set; }
public string NbPADP { get; set; } //*1
public IEnumerable<SelectListItem> PADPItems { get; set; }
public bool Other { get; set; }
public SuggestionViewModel()
{
PADPItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
PADCItems = (new double[] { 0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5, 2.75, 3, 3.25, 3.5, 3.75, 4 }).Select(d => new SelectListItem { Value = d.ToString(), Text = d.ToString() });
}
}
我假设你在NbPADP
属性中得到你选择的值(如果我错了,请纠正我)。当您使用您的模型时,您可以通过使用法语本地化转换它来获得双精度值:
double dNbPADP = Double.Parse(model.NbPADP, new CultureInfo("fr-FR"));