-3

私は次の値を持っています48.81、それはデータベースからの文字列として来ます、私はそれを10進数に変換する必要があります、私は使用しています:

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)

編集

エラーを表示しています

編集

座標を表示

編集 これはデータベース内の座標の値です

DB内の座標の値を表示する

4

2 に答える 2

1

databaseCoordinate問題は、ドットの代わりにコンマを含む変数にあります。InvariantCultureは、コンマを使用して数字のグループを区切り、ドットを小数点記号として使用します。これを確認するには、次のコードを実行します。

//outputs '.'
Console.WriteLine(CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
//outputs ',' 
Console.WriteLine(CultureInfo.InvariantCulture.NumberFormat.NumberGroupSeparator); 

あなたがそれについてできること:

  1. 解析する前にコンマをドットに置き換えてください。そうすれば、すべてのコードが期待どおりに機能します。
  2. Convert.ToDecimal次のようなメソッドに小数点を指定します。

    decimal Seconds = Convert.ToDecimal((Coordinate.Substring(4, 5)), new NumberFormatInfo { NumberDecimalSeparator = "," });
    
  3. ドットを小数点記号として使用する座標を持つすべてのDBエントリの更新スクリプトDBを記述します。

-このコードはあなたが期待している結果を与えます:

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
于 2012-05-15T15:10:35.630 に答える
-1

データベースから受け取った値に関連する問題があります。そしてまたあなたのアプローチの問題。

まず、10進数の値が必要な場合は、それを10進数としてデータベースに保存します。

次に、少なくとも9文字の文字列を解析しようとしています。あなたが持っているのはたった5文字です。

(Coordinate.Substring(4, 5))ここでは、少なくとも9文字を期待していることを宣言しています。あなたが持っているのはたった5文字です。

于 2012-05-15T14:35:24.307 に答える