英文:
asp.net-core save float as int
问题
I'm working on this application in asp.net core 6.0 where I'm trying to save a float value (in this case 0.4) and it's being saved as an int with a value of 4. I don't understand why the class has a value of 4, but when checking the model state, the value of the "water" variable is 0.4 (the correct one).
我正在开发一个在asp.net core 6.0中的应用程序,我尝试保存一个浮点值(在这种情况下为0.4),但它被保存为一个整数,值为4。我不明白为什么该类的值为4,但在检查模型状态时,“water”变量的值为0.4(正确的值)。
Here we have the class:
这是该类:
public class RPGH01_01
{
public int ID { get; set; }
[Display(Name="Toma agua*")]
public float Water { get; set; }
[Display(Name = "Fecha")]
public DateTime Date { get; set; }
[Display(Name = "Valor cloro**")]
public float Chlorine { get; set; }
[Display(Name = "Color")]
public bool Color { get; set; }
[Display(Name = "Olor")]
public bool Smell { get; set; }
[Display(Name = "Turbidez")]
public bool Turbidity { get; set; }
[Display(Name = "Sabor")]
public bool Flavor { get; set; }
[Display(Name = "Observaciones")]
public string Observations { get; set; }
public int UserID { get; set; }
}
Values of the class:
类的值:
and value of the input and the model state validation:
输入的值和模型状态验证:
public async Task<IActionResult> Create([Bind("ID,Water,Date,Chlorine,Color,Smell,Turbidity,Flavor,Observations,UserID")] RPGH01_01 rPGH01_01)
{
//This is to know what user create the report
var userAccountId = HttpContext.Session.GetString("user");
rPGH01_01.UserID = Convert.ToInt32(userAccountId);
if (ModelState.IsValid)
{
_context.Add(rPGH01_01);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rPGH01_01);
}
Thanks for your time.
谢谢您的时间。
英文:
I'm working on this application in asp.net core 6.0 where I'm trying to save a float value (in this case 0.4) and it's being saved as an int with a value of 4. I don't understand why the class has a value of 4, but when checking the model state, the value of the "water" variable is 0.4 (the correct one).
Here we have the class:Class
public class RPGH01_01
{
public int ID { get; set; }
[Display(Name="Toma agua*")]
public float Water { get; set; }
[Display(Name = "Fecha")]
public DateTime Date { get; set; }
[Display(Name = "Valor cloro**")]
public float Chlorine { get; set; }
[Display(Name = "Color")]
public bool Color { get; set; }
[Display(Name = "Olor")]
public bool Smell { get; set; }
[Display(Name = "Turbidez")]
public bool Turbidity { get; set; }
[Display(Name = "Sabor")]
public bool Flavor { get; set; }
[Display(Name = "Observaciones")]
public string Observations { get; set; }
public int UserID { get; set; }
}
Values of the class:Values
and value of the input and the model state validation:
public async Task<IActionResult> Create([Bind("ID,Water,Date,Chlorine,Color,Smell,Turbidity,Flavor,Observations,UserID")] RPGH01_01 rPGH01_01)
{
//This is to know what user create the report
var userAccountId = HttpContext.Session.GetString("user");
rPGH01_01.UserID = Convert.ToInt32(userAccountId);
if (ModelState.IsValid)
{
_context.Add(rPGH01_01);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rPGH01_01);
}
modelstate validation
Thanks for your time
I have tried inserting other values (such as 0.4), but it rejects them because they are text. I have changed the variables to see if it worked by using double instead of float.
答案1
得分: 0
这很可能是由于你配置的区域设置所致。
在美国,小数点用作十进制分隔符,而逗号用作分隔符。但这些分隔符通常会被忽略。
float.Parse("4,500", CultureInfo.GetCultureInfo("en-US")); // 4500
float.Parse("4,5", CultureInfo.GetCultureInfo("en-US")); // 45
float.Parse("0,4", CultureInfo.GetCultureInfo("en-US")); // 4
在智利,逗号用作小数分隔符,而句点用作分隔符。
float.Parse("0.4", CultureInfo.GetCultureInfo("es-CL")) // 4
float.Parse("0,4", CultureInfo.GetCultureInfo("es-CL")) // 0.4
这可能不是一个错误:如果你的目标受众来自以这种方式表示数字的文化,用户可能会期望输入"0,4"来表示0.4。
如果你有来自各种文化的用户,你需要找到一种确定用户期望的区域设置并在请求中设置它的方式。
英文:
This is most likely due to your configured culture.
In the United States, a period is used as a decimal marker while commas are used as separators. But those separators are largely ignored
float.Parse("4,500", CultureInfo.GetCultureInfo("en-US")); // 4500
float.Parse("4,5", CultureInfo.GetCultureInfo("en-US")); // 45
float.Parse("0,4", CultureInfo.GetCultureInfo("en-US")); // 4
In Chile, the comma is used as a decimal marker and the period is used as a separator.
float.Parse("0.4", CultureInfo.GetCultureInfo("es-CL")) // 4
float.Parse("0,4", CultureInfo.GetCultureInfo("es-CL")) // 0.4
This may not be a bug: if your intended audience comes from a culture that represents numbers this way, users might actually expect to enter "0,4"
instead to represent 0.4
.
If you have users from a variety of cultures, you'll need to find a way to determine the user's expected culture and set it on the request.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论