1

.NET 2.0 SP 1 および VB.NET を使用して Windows Mobile を実行するバーコード スキャナー用のアプリケーションを保守しています。このアプリケーションは、PL/SQL を使用して Oracle データベースと統合されます。

スキャナーで選択するアイテムのリストを含む DataTable を返す SQL クエリがあり、数量が 10 進数の場合があります。

問題は、0,8 などの 10 進数を文字列から double に変換できないことです。私は次のすべてを試しました:

Dim quantity As String = "0,8"
Dim result As Double = Convert.ToDouble(quantity)
Dim result As Double = Double.Parse(quantity)
Dim result As Double = CDbl(quantity)

いずれの場合も、結果は 0.8 ではなく 8 です。

4

2 に答える 2

2

CF の解析能力は限られています。デバイス カルチャが en-US に設定されていると仮定します。その場合、次のようなことができます。

Dim quantity As String = "0,8"
Dim result As Double = Double.Parse(quantity.Replace(',', '.'))

デバイスの現在の設定に関して、より多くのロケールを認識できるようにしたい場合は、次のような方法でより安全にすることができます。

Dim quantity As String = "0,8"
Dim result As Double

If CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == "."
    result = Double.Parse(quantity.Replace(',', '.'))
Else
    result = Double.Parse(quantity)
End If
于 2013-04-10T20:30:14.180 に答える
1

あなたのように見えますCurrentCultureが、代わりに.値を解析しようとしています。,

それを試してください:

System.Threading.Thread.Current.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
Dim result As Double = Double.Parse(quantity)
于 2013-04-10T19:38:36.507 に答える