转换为双倍

时间:2013-11-07 13:51:37

标签: c#

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

假设我的数据库的值在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);
                }
            }

3 个答案:

答案 0 :(得分:8)

区域设置,特别是用于控制用作小数点的符号的区域设置,正在影响转换。为避免这种情况,您需要执行区域不变转换,以便机器上的区域设置不起作用。例如:

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

那就是说,我想知道为什么你首先将浮点值存储为字符串。最好在尽可能早的时候将用户输入转换为自然形式,并且尽可能晚地转换回字符串。

答案 1 :(得分:5)

答案 2 :(得分:3)

这是因为您的CultureInfo。显然,您的PC使用十进制表示法的句点,而您的服务器使用逗号。如果您尝试使用其他方法转换其中一个,则会遇到此问题。

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