web-dev-qa-db-ja.com

C#で負のdouble数を解析する際の例外

DBからいくつかのデータを抽出するコードの平和をコーディングしています。そして問題は、負の数の文字列「-2.8」をdoubleに変換したいということです。とても簡単だと思いました。私は最初に試しました:

var climateString = "−2.8";
var number = double.Parse(climateString);

この結果で:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

だから私はもう一度考え、グーグルで検索し、新しい答えを得ました:

var climateString = "−2.8";
var styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |NumberStyles.Float | NumberStyles.AllowDecimalPoint;
var rit = double.Parse(climateString, styles);

エピックは再び失敗します:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

そんな簡単なことをどうやってやるのかわからないほど愚かなことはできないと改めて思いました。私はこれを試しました:

 var climateString = "−2.8";
 var doue = Convert.ToDouble(climateString, CultureInfo.InvariantCulture);

はい、まったく同じ例外です。数字を探し始めて、マイナス記号に気づきました。この数を注意深く見てください "-2.8"これは負の数ではありません。これは負の数「-2.8」です。それらの兆候をもう一度見てください "----- --------"同じではありません。異なる符号文字を使用して文字列を解析すると、例外がスローされます:S。では、C#で文字列を2つの数値にエレガントに解析する方法を知っている人はいますか?ありがとう!

13

それを行う適切な方法:

var climateString = "−2.8"; 

var fmt = new NumberFormatInfo();
fmt.NegativeSign = "−";
var number = double.Parse(climateString, fmt);    
17
Søren Debois

ダッシュの代わりにハイフンを使用します。

var climateString = "−2.8".Replace ("−", "-");
var number = double.Parse(climateString);

(ただし、そのデータベースから出てくる他の奇妙なキャラクターに注意したいと思うかもしれません。)

9
Søren Debois

古い投稿かもしれませんが、これを読んでいる他の人にとっては...

あなたはNumberStyles.AllowTrailingSignを持っています、それはおそらくNumberStyles.AllowLeadingSignであるはずです、さもなければそれはとにかく-記号を受け入れません。

3

数字で使用されているマイナス文字ではない文字があります(ダッシュではなくハイフンがあります)。あなたはそれを交換しなければなりません、他の「エレガントな」方法はありません。これらの2つの文字は、視覚的には互いに似ているだけですが、意味を変えずに互いに置き換えることを意図したものではありません。

var climateString = "−2.8";
var number = double.Parse(climateString.Replace("−","-"));
2
Szymon

エラーがあればそれを優しく処理するので、Parseメソッドの代わりにTryParseを使用することをお勧めします。

コード-

var test1 = "-123.95"; decimal result; decimal.TryParse(test1, out result);

resultで解析されたdouble値を取得します。

0
arpitbakshi