Double未在MySQL数据库中正确存储

时间:2016-05-04 20:20:54

标签: c# mysql

我有一个MVC应用程序,它具有一个可以更新数据库纬度和经度的宁静服务。我将值作为字符串发送到API,并在将其作为Double存储在数据库中之前将其转换为Double。这是我用来将字符串转换为double的代码:

Double _latitude, _longitude;
try
{
     Double.TryParse(lattitude, NumberStyles.Any,CultureInfo.CurrentCulture, out _latitude);
     Double.TryParse(Longtitude, NumberStyles.Any,CultureInfo.CurrentCulture, out _longitude);
}
catch(Exception e)
{
     _latitude = 0;
     _longitude = 0;
}

当它存储在数据库中时,我缺少小数点。例如:

  

53.345634存储为53345634

我正在研究在Windows 2012上运行的开发环境。但是当它转移到Windows 2008生产服务器时,我看到了这个问题。

2 个答案:

答案 0 :(得分:3)

指定正确的IFormatProvider / CultureInfo

您观察到的行为可能是由于两台计算机具有不同的CurrentCulture s而导致的。默认值CurrentCulture取决于Windows的版本。

要在各种计算机上获得一致的结果,您应该为Parse或TryParse方法提供特定的CultureInfo(或任何其他实现IFormatProvider的类),例如

// using System.Globalization;
double value = Double.Parse(stringValue, CultureInfo.InvariantCulture); 

double valueUsEnglish = Double.Parse(stringValue, new CultureInfo("en-US"));

Parse方法使用特定于文化的小数点符号组分隔符号。在某些语言(例如英语)中,小数点符号是点,而在其他语言中(例如用波兰语),它是逗号。组分隔符号在各种语言中也不同。

如果将53.345634解析为53345634,则您的计算机会使用其中dot为组分隔符的区域性文化。

Parse vs TryParse

您还应该考虑使用Parse TryParse方法更合适。

如果在正常操作期间您的程序期望无效输出(例如,它是用户提供的值),您绝对应该使用TryParse并检查返回的值。 TryParse返回一个bool,指示解析是否成功并且不会抛出异常。

如果要解析的值永远不会出错(例如,您正在解析与程序绑定的资源),则可以使用Parse。如果您有某种方法可以恢复或向用户提供一些其他信息,则可以捕获适当的例外情况。根据文档,可能的例外情况包括:ArgumentNullExceptionFormatExceptionOverflowException

答案 1 :(得分:0)

验证2008 db中的dqta类型是十进制而不是int