好的我坐在这个问题上有点愚蠢,但我不知道如何谷歌这个解决方案。
假设我的数据库的值在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);
}
}
答案 0 :(得分:8)
区域设置,特别是用于控制用作小数点的符号的区域设置,正在影响转换。为避免这种情况,您需要执行区域不变转换,以便机器上的区域设置不起作用。例如:
double value = double.Parse(stringValue, CultureInfo.InvariantCulture);
那就是说,我想知道为什么你首先将浮点值存储为字符串。最好在尽可能早的时候将用户输入转换为自然形式,并且尽可能晚地转换回字符串。
答案 1 :(得分:5)
答案 2 :(得分:3)
这是因为您的CultureInfo。显然,您的PC使用十进制表示法的句点,而您的服务器使用逗号。如果您尝试使用其他方法转换其中一个,则会遇到此问题。
解决方案:Convert.ToDouble()
有一个额外的重载,允许您传递cultureInfo进行转换。或者您可以将变量作为浮点数或小数保存在数据库中。