关于逗号双重数字的奇怪问题

时间:2013-01-10 07:51:51

标签: c# ajax

我在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的输入参数。

3 个答案:

答案 0 :(得分:4)

看起来浏览器或服务器具有不同的数字格式,也许它在文化中运行,其中','用作小数分隔符和'。'作为一个千位分隔符。

您可以尝试在启动服务器之后或运行数据库查询之前将Thread.CurrentThread.CurrentCulture设置为CultureInfo.InvariantCulture

答案 1 :(得分:0)

如果您先使用数据库生成EF映射。您应该关注EntityFramework ..

EF将SQL列类型float映射到C#类型double而不是浮点

请参阅:SqlClient for Entity FrameworkTypes

答案 2 :(得分:0)

将其作为字符串传递,并在保存实体框架时尝试这样:

var amount = decimal.Parse(InvoiceAmount, NumberStyles.Any);