2010-12-06 9 views
1

これは非常にnoobの質問ですが、私はちょうどそれのための正しい声明を得ることはできません。二重のドットの後ろにある文字を取得

doubleを表示するために、ドットの前の部分とドットの後の最初の2桁を2つに分割したいとします。私はstringとしてそれが必要です。ターゲット言語:C#。

例:「

Math.Floor(value).ToString() 

...しかし、一部を取得するための正しい方法は何である:2345.1234私は、ドットの前の部分を取得する方法を知っている"2345""12"

となり、それは単にですドットの後ろに? "

Math.Round(100 * (value - Math.Floor(value))).ToString("00"); 

私はより良い方法があると確信しているが、私: 私は、何かを考えることはできません

...簡単な方法であることを行うにはいくつかの素晴らしい方法があるに違いありませんそれを考えることはできません。誰でも?

+2

あなたが思いついたテクニックは正しい*ではないので、確かに*良い方法です。たとえば、doubleが負の場合は失敗します。 –

+0

それは正しいですが、価値が商品の価格を表すことを忘れていました。残念ながら、通常はプラスです。 – Dirk

+2

お金を扱う場合は、おそらくDecimalタイプの使用を検討するべきです。それはおそらく実際にあなたが数字の小数部分を得るのに役立つわけではありませんが、それはあなたのお金をまっすぐに保つのに役立ちます! – wageoghe

答えて

5

正規表現(正規表現)がおそらく最善の策ですが、MOD演算子を使用すると、別の価値あるソリューション...

stuffToTheRight = value % 1 

乾杯かもしれません。

+1

これは私が探していたものです。私は数年間コード化しておらず、この「何か」があることを知っていました。私は2桁が使用得るために、この古き良きMOD演算子:) – Dirk

+1

を意味: '(int型)驚くほど稀であるアカウントに地域設定を取るための(stuffToTheRight * 100)' – Commodore63

0
use regex ".[0-9][0-9]" 
+1

注意: 'ToString()'のカルチャを設定しておらず、既定のカルチャがコンマを小数点として持つ場合、これは機能しません。 – svick

+1

は '\ 'でなければなりません[0-9] [0-9]" '任意の文字に一致します。 – Commodore63

4
// 
//Use the Fixed point formatting option. You might have a bit more work to do 
//if you need to handle cases where "dot" is not the decimal separator. 
// 
string s = value.ToString("F2", CultureInfo.InvariantCulture); 
var values = s.Split("."); 
string v1 = values[0]; 
string v2 = values[1]; 

書式設定の詳細については、このリンクを参照してください:1行で

// 
//Use the Fixed point formatting option. 
// 
string s = value.ToString("F2", CultureInfo.CurrentCulture); 
var values = s.Split(CultureInfo.NumberFormat.NumberDecimalSeparator); 
string v1 = values[0]; 
string v2 = values[1]; 
+1

+1、。 –

0

それは次のようになります:
ここhttp://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

のアカウントに現在のカルチャを取るしようとするいくつかのテストされていないコードがありますstring[] vals = value.ToString("f2").Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToCharArray());

vals[0]:ポイント前。
vals[1]:ポイント以降。

関連する問題