2017-08-22 13 views
4

私は.Net Coreの文字列に取り組んでいます。私は:nを使用してフォーマットされた文字列を持ち、フォーマットされているときは出力は123 456,00です。私は書式設定された文字列が私がそれが欲しい文字列に等しいと主張したいと思ったが、私はAssert.Equal Failure()を得て、問題は空白文字にある。出力では、2つのスペースが異なることを示します。ここで.NET String.Formatスペース文字を通常の文字列に印刷するには?

は私のコードです:

public void Separator() 
{ 
    var str = string.Format("{0:n}", 123456); 
    Assert.Equal("123 456,00",str); 
} 

Assert.Equal(' ',str[3]);を次のように私も、私は期待値が0x00aであることを取得アサートとの定期的な空白文字にフォーマットされた文字列から空白文字を比較しました。

どうしてこのようなことが起こり、string.Format()を使用せずに同じ文字を得ることができますか?

+0

あなたは 'Assert.Equalは()' 123 456,00'は123 'と等しくない'と言うことを言いたいのか456,00'?次に、あるヘキサエディタで正確な値をチェックする必要があります。あるいは、オンラインツールを使ってタイプミスがないかどうかを確認してください。試してみてくださいhttp://r12a.github.io/apps/conversion/ –

+0

はい私は2つのスペースが等しくないことを意味する(pos 3)の違いがあります。 – Bayrem

+0

スペースは同じですか? http://r12a.github.io/apps/conversion/ –

答えて

4

使用しているカルチャでは、番号グループの区切り文字がスペース以外のASCII文字であることが指定されています。私はあなたがここでru-RUを使用していると推測しています。これは数字がASCII文字160であることを意味します。つまり、スペースを入力しただけで文字列が一致しません。

あなたは例えば、このような文化の区切りにスペースを置き換えることができます:

var currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture; 
var stringToCompare = "123 456,00".Replace(
    " ", 
    currentCulture.NumberFormat.NumberGroupSeparator); 

Assert.Equal(stringToCompare, str); 
+0

興味深いことに、数字の中のNO-BREAK SPACEは通常のスペースよりもはるかに適切です。 Nit pick:.NETの文字はASCIIではなくUnicodeです。 NO-BREAK SPACEには、値 '¥u00a0'(160)を持つUTF-16コード単位が1つあります。 –

関連する問題