我有以下值48.81
,它来自数据库的字符串,我需要将其转换为十进制,我正在使用:
Dim Seconds As Decimal = Convert.ToDecimal((Coordinate.Substring(4, 5)), CultureInfo.InvariantCulture)
我收到了4881D
,我需要48,81
有什么想法吗?我以为CultureInfo.InvariantCulture
会帮助我
修改
坐标值为675900.244
。
我像这样“分裂”它:
Dim Degress As Integer = Coordinate.Substring(0, 2),
Dim Minutes As Integer = Coordinate.Substring(2, 2),
Dim Seconds As Decimal = Convert.ToDecimal((Coordinate.Substring(4, 5)), CultureInfo.InvariantCulture),
Dim Position As Enumerations.EnumCoordinatesPosition = Coordinate.Substring(9, 1)
修改
修改
修改 这是数据库中坐标的值
答案 0 :(得分:1)
问题在于变量databaseCoordinate
,它包含逗号而不是点。 InvariantCulture使用逗号分隔数字组和点作为小数符号。要查看此内容,请执行以下代码:
//outputs '.'
Console.WriteLine(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
//outputs ','
Console.WriteLine(CultureInfo.InvariantCulture.NumberFormat.NumberGroupSeparator);
你能做些什么:
为Convert.ToDecimal
方法指定小数分隔符,如下所示:
decimal Seconds = Convert.ToDecimal((Coordinate.Substring(4, 5)), new NumberFormatInfo { NumberDecimalSeparator = "," });
为所有数据库条目写入更新脚本数据库,其坐标使用点作为小数符号。
示例 - 此代码提供您期望的结果:
string Coordinate = "100948.811"; //Note the dot instead of comma
int Degress = Convert.ToInt32(Coordinate.Substring(0, 2)); //10
int Minutes = Convert.ToInt32(Coordinate.Substring(2, 2)); //9
decimal Seconds = Convert.ToDecimal((Coordinate.Substring(4, 5)), CultureInfo.InvariantCulture); //48.81
答案 1 :(得分:-1)
从数据库收到的值存在问题;而且你的方法也有问题。
首先,如果您需要十进制值,则将其作为十进制值存储在数据库中。
其次,你试图解析一个至少有9个字符的字符串。你所拥有的只有5个字符。
(Coordinate.Substring(4, 5))
在这里你宣称你期待至少9个字符;你拥有的只有5个字符。