0

float 型の「loss」という名前のフィールドが db にあります。

これを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 の入力パラメーターであると述べています。

4

3 に答える 3

4

ブラウザまたはサーバーの数値形式が異なるようです。おそらく、「、」が小数点記号として使用され、「。」が使用されているカルチャで実行されています。千のセパレーターとして。

サーバーを起動した後、またはデータベースクエリを実行する前にに設定Thread.CurrentThread.CurrentCultureしてみてください。CultureInfo.InvariantCulture

于 2013-01-10T08:24:02.963 に答える
0

最初にデータベースを使用してEFマッピングを生成した場合。EntityFrameworkについて心配する必要があります。

EFは、SQL列タイプをfloatではなくfloatC#タイプにマップしますdouble

参照:エンティティFrameworkTypesのSqlClient

于 2013-01-10T08:23:13.133 に答える
0

文字列として渡し、エンティティ フレームワークに保存するときに次のように試してください。

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