我在db中有一个名为'loss'的字段,其类型为float。
以下是我在db:
中保存的方法[HttpPost]
public int SaveLoss(float loss)
{
var t = (from x in db.tblTest
where x.id == 8
select x).First();
t.loss = loss; //also tried t.loss = loss / 1;
db.SaveChanges(); //entity framework
}
这就是我一直工作的方式,而且在所有其他表格中它都能正常工作。
我通过文本框输入损失,这是Ajax调用:
$.ajax({
type: "POST",
url: "/Test/SaveLoss",
data: {
loss: parseFloat($('#myTextbox').val().replace(',', '.'))
}
....
如果在文本框中我输入66.55,一切都很好。如果在文本框中输入66,55,则存储在db中的值为6655.我的计算机上不会发生此问题。当我在服务器上发布应用程序时,它就会发生。为什么会出现这个恼人的问题以及如何解决它?
Fiddler说66.55是SaveLoss的输入参数。
答案 0 :(得分:4)
看起来浏览器或服务器具有不同的数字格式,也许它在文化中运行,其中','用作小数分隔符和'。'作为一个千位分隔符。
您可以尝试在启动服务器之后或运行数据库查询之前将Thread.CurrentThread.CurrentCulture
设置为CultureInfo.InvariantCulture
。
答案 1 :(得分:0)
如果您先使用数据库生成EF映射。您应该关注EntityFramework ..
EF将SQL列类型float
映射到C#类型double
而不是浮点
答案 2 :(得分:0)
将其作为字符串传递,并在保存实体框架时尝试这样:
var amount = decimal.Parse(InvoiceAmount, NumberStyles.Any);