0

我在数据库中有一个名为“loss”的字段,它的类型是浮点数。

这是我将其保存在数据库中的方法:

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

4

3 回答 3

4

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

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

于 2013-01-10T08:24:02.963 回答
0

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

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

请参阅:实体框架类型的 SqlClient

于 2013-01-10T08:23:13.133 回答
0

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

var amount = decimal.Parse(InvoiceAmount, NumberStyles.Any);
于 2014-11-04T05:37:44.720 回答