-1

好的,我坐在这个问题上有点愚蠢,但我不知道如何用谷歌搜索这个解决方案。

可以说我有一个数据库,里面有值e.g 1000.00

Convert.ToDouble()我使用;将其转换为双倍

在我的电脑上它可以工作,但是在我的服务器上它不会,除非我更改为字符串并替换.,.

1000,00 在服务器上工作,但不是 1000.00

但是,如果我将 1000,00 转换为 Double,我将无法再次将其保存在数据库中,除非将其取回字符串并替换为 .

我该如何克服这个问题。操作系统是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 使用十进制表示法的句点,而您的服务器使用逗号。如果您尝试使用另一种方法转换其中一个,则会出现此问题。

解决方案:Convert.ToDouble()有一个额外的重载,允许您传递cultureInfo 进行转换。或者您可以将变量保存在数据库中作为浮点数或小数。

于 2013-11-07T13:56:14.523 回答