テキストボックスに、次のようにフォーマットする必要がある残高を示す文字列値を入力します。
###,###,###,##0.00
Value.ToString( "c")を使用できますが、これにより通貨記号がその前に配置されます。
上記のフォーマットを実現するために、テキストボックスにデータを入力する前に、文字列をどのように操作するか考えていますか?
私はこれを試しましたが、成功しませんでした:
String.Format("###,###,###,##0.00", currentBalance);
どうもありがとう、
string forDisplay = currentBalance.ToString("N2");
通貨の書式設定で希望どおりの結果が得られる場合は、NumberFormatInfo
のクローンを作成し、CurrencySymbol
プロパティを ""に設定します。もちろん、あなたが望むように負の数を処理することを確認する必要があります。
例えば:
using System;
using System.Globalization;
class Test
{
static void Main()
{
NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
nfi.CurrencySymbol = "";
Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
}
}
他のオプションは、もちろんカスタム数値形式の文字列を使用することです-それは本当に通貨の見た目を、シンボルなしで正確にミラーリングするか、数字の正確な位置を制御するかによって異なります。
やってみました:
currentBalance.ToString("#,##0.00");
これは、次のものの長文版です。
currentBalance.ToString("N2");
string result = string.Format( "{0:N2}"、value); // ### ### ##。##のような結果の場合
これを行うには、次のように グループ区切り記号 および セクション区切り記号 を使用します。
currentBalance.ToString("#,0.00;(#,0.00)");
これは@JonSkeetからの回答のような文化の違いを考慮していませんが、これはen-USの文化通貨形式が単一のカスタム形式文字列を使用して生成する小数点以下の桁数、丸め、千の区切り、負の数の処理を模倣します。
CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";
Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45
このシンプルなソリューションは、米国通貨で動作します。
国際通貨サポートが不要な場合は、これを使用して、$を削除する通貨記号に置き換えます。
// for USD
string result = currentBalance.ToString("C").Replace("$", "")
または
// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
これはやり過ぎかもしれませんが、ラウンド、フォーマット...
@helper TwoDecimalPlaces(decimal? val)
{
decimal x = 0;
decimal y = 0;
string clas = "text-danger";
if (val.HasValue)
{
x = (decimal)val;
if (val > 0)
{
clas = "";
}
}
y = System.Math.Round(x, 2);
IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
<span class="@clas">@string.Format("{0:N2}", y)</span>
}