web-dev-qa-db-ja.com

文字列から10進数への変換:カンマではなくドット区切り

テキストボックスから文字列を読み取りました。 10進数の区切りのためにコンマが含まれています。

_NumberFormatInfo.CurrencyDecimalSeparator_を_,_(コンマ)に設定していますが、文字列を10進数に変換するとConvert.ToDecimal(mystring); 10進数のドット区切り値を取得します。

例:

_decimal a=Convert.ToDecimal("1,2345"); ----> decimal is 1.2345
_

私も試しました:

_double a=Convert.ToDouble("1,2345"); 
_

ただし、10進数のドット

29
LoveMyWife

返信ありがとうございます。

10進数をxmlファイルに書き込む必要があるため、問題を見つけました。 this の議論で、xmlファイルの標準では10進値にドットが使用され、これは文化に依存しないことを学びました。だから私の解決策は、XMLファイルにドット10進数を書き込み、同じXMLファイルから読み取った文字列を変換するmystring.Replace(".", ","); ThanksAgatfor xmlコンテキストで問題を調査するための提案とΕГИІИОVisual Studioが自分の持っている文化設定を尊重していないことを知らなかったため私のコードで。

2
LoveMyWife

これはすべて文化に関するものです。 「米国英語」以外の文化がある場合(また、開発の良い方法として)、次のようなものを使用する必要があります。

_var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US"));
// (or 1,2345 with your local culture, for instance)
_

(明らかに、「en-US」を自分の番号の文化に置き換える必要があります local culture

同様に、ToString()を実行したい場合

_d.ToString(new CultureInfo("en-US"));
_
34
Agat

交換する代わりに、次のような文化を強制することができます

var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," });

出力は18.285になります

22
Ashok Mandial

私はこのソリューションを使用することになりました。

decimal weeklyWage;
decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);
1
Gervo

Visual Studioで10進数または2倍の値を表示しています。これは、コードに設定されているカルチャ設定を尊重しません。

小数点記号としてカンマを含むdecimalおよびdouble値を表示する場合は、コントロールパネルの地域と言語の設定を変更します。

0

Convert.ToSingle(my_value)を使用しているときに同様の問題に直面しました。OS言語設定が英語の場合2.5(例)は2.5と見なされますOS言語がドイツ語の場合、2.5は2,5として扱われます。不変文化IFormatが提供され、動作します。常に「。」を扱います。なので '。'システム言語に関係なく、「、」の代わりに。

float var = Convert.ToSingle(my_value、System.Globalization.CultureInfo.InvariantCulture);

0
Varma Naidu V