カルチャに関係なく、asp.net mvcで数値をフォーマットするためにデフォルトの小数と千単位の両方の区切り文字を設定するにはどうすればよいですか?
7 に答える
DisplayTemplate
このような数値がビューにどのように表示されるかを処理するを作成できます。
/Views/Shared/DisplayTemplates/float.cshmtl
:
@model float
@string.Format("{0:N2}", Model);
Amount
タイプが次の場合は、ビューから次のように呼び出すことができますfloat
。
@Html.DisplayFor(m => m.Amount)
探しているものを実現するには、カスタムの数値形式を指定する必要があります。 これは、カスタム文字列フォーマット関数の作成に関するMSDNです。
カスタムの千単位の区切り文字が本当に必要な場合は、独自のNumberFormatInfo変数を作成して、必要な値を千単位の区切り文字(および必要に応じて小数)に割り当てます。次に、カスタムフォーマットを番号に適用します。
var numberFormatter = new CultureInfo( "en-US", false ).NumberFormat;
numberFormat.NumberDecimalSeparator = ";";
numberFormat.NumberGroupSeparator = "-";
var myNumber = 1234567.89;
var myFormattedNumber = myNumber.ToString("#,###.##", numberFormatter);
//myFormattedNumber -> 1-234-567;89
MSDNのNumberFormatクラスに関する情報
NumberFormat
千単位の区切り文字を制御するには、現在のカルチャのに変更を適用する必要があります。
現在のカルチャに関係なくこれを実行したい場合は、現在のカルチャを複製し、変更NumberFormat
を適用して現在のカルチャとして設定するだけです。
MVCアプリでは、通常、Application_BeginRequest中にこれを行います
protected void Application_BeginRequest(object sender, EventArgs e)
{
newCulture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
newCulture.NumberFormat.NumberGroupSeparator = "~";
System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = newCulture;
}
これで、ToString()の「通常の」フォーマットオプションを使用して、必要に応じてフォーマットをさらに制御できます。
var a = 3000.5;
var s = a.ToString('N:2') // 3~000.50
s = a.ToString('N:4') // 3~000.5000
variable.ToString( "n2")-これはASP.NetMVCRazorで機能しました。
string.Format("{0:N2}", yourLovelyNumber);
最終的に私のために働いたコードを投稿します。コントローラ上、OnActionExecuting関数上:
ViewBag.CurrentNumberFormat = new System.Globalization.CultureInfo("en-US", false).NumberFormat;
ViewBag.CurrentNumberFormat.NumberDecimalDigits = 2;
ViewBag.CurrentNumberFormat.NumberDecimalSeparator = "~";
ViewBag.CurrentNumberFormat.NumberGroupSeparator = " ";
とビューで:
@((1234567.435).ToString("#,###.##", ViewBag.CurrentNumberFormat))
私は同じ問題を抱えていて、autoNumericプラグインをお勧めできますhttps://github.com/autoNumeric/autoNumeric
プラグインを含める:
<script src="~/Scripts/autoNumeric/autoNumeric.min.js" type="text/javascript"></script>
HTML:
<input type="text" id="DEMO" data-a-sign="" data-a-dec="," data-a-sep="." class="form-control">
脚本:
<script>
jQuery(function($) {
$('#DEMO').autoNumeric('init');
});
</script>
数字のみを入力できます。100000,99と入力すると、100.000,99と表示されます。