-1

わかりました、この問題のような愚かなことに座っていますが、これをグーグルで解決する方法がわかりません。

内部に値を持つデータベースがあるとしましょうe.g 1000.00

Convert.ToDouble();を使用して double に変換します。

私のPCでは機能しますが、サーバーでは文字列に変更してに置き換えない限り機能しませ.,

つまり、1000,00 はサーバー上で機能しますが、1000.00 は機能しません。

しかし、Convert 1000,00 to Double を実行すると、文字列に戻して , を に置き換えることなく、データベースに再度保存することはできません。

どうすればこの問題を克服できますか。OSはwin7、サーバーはSQL Server 2012です。

DataTable DT = SQLServer.ExecuteQueryWithResults("EXEC CalculateMonthlyBallance");
            foreach (DataRow row in DT.Rows)
            {
                ClientCompany CC = Data.Companies.First(C => C.CompanyID == row[0].ToString());
                Finance Saldo = new Finance(CC.CompanyID, "Monthly Saldo", "Monthly Saldo", 0, 0, new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1), F_Type.Saldo, -1);
                double rv = row[3].ToDouble();
                MessageBox.Show("Company ID : " + CC.CompanyID.ToString() + " " + rv.ToString());
                if (rv > 0)
                {
                    Saldo.Debit = rv;
                }
                else if (row[3].ToDouble() < 0)
                {
                    Saldo.Credit = -rv;
                }

                MessageBox.Show(Saldo.Debit + " " + Saldo.Credit);
                CC.Finances = RetrieveFinances(CC.CompanyID).ToList();
                if (CC.Finances.Count(S => (S.F_Type == F_Type.Saldo) && (S.Date == new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1))) == 0)
                {
                    CC.Finances.Add(Saldo);
                    CaptureFinancial(Saldo);
                }
            }
4

3 に答える 3

8

ロケール設定、特に小数点として使用される記号を管理する地域設定は、変換に影響します。これを回避するには、マシンのロケール設定が影響しないように、カルチャ インバリアント変換を実行する必要があります。例えば:

double value = double.Parse(stringValue, CultureInfo.InvariantCulture);

とはいえ、そもそもなぜ浮動小数点値を文字列として保存しているのか疑問に思います。ユーザー入力をできるだけ早い段階で自然な形式に変換し、できるだけ遅く文字列に戻すのが最善です。

于 2013-11-07T13:54:37.033 に答える
5

Convert.ToDouble(string,CultureInfo)を参照してください。

于 2013-11-07T13:54:32.937 に答える
3

これは、CultureInfo によるものです。お使いの PC では 10 進表記にピリオドが使用されているのに対し、サーバーではコンマが使用されているようです。他の方法を使用してそれらの 1 つを変換しようとすると、この問題が発生します。

解決策:Convert.ToDouble()変換のために cultureInfo を渡すことができる追加のオーバーロードがあります。または、変数を float または decimal としてデータベースに保存することもできます。

于 2013-11-07T13:56:14.523 に答える