2017-09-07 19 views
1

asp.netコアの小数点以下の桁が狂っています。asp.netコアの小数点以下の桁数を設定する方法は?

SQL Serverのテーブル:

money decimal (18,0) 

は私が任意の10進値を得るとき、それは、小数点以下2桁に常にだ、

var cultureInfo = new CultureInfo("vi-VN"); 
     cultureInfo.NumberFormat.CurrencySymbol = "đ"; 
     cultureInfo.NumberFormat.CurrencyDecimalDigits = 0; 
     cultureInfo.NumberFormat.CurrencyDecimalSeparator = ","; 
     cultureInfo.NumberFormat.CurrencyGroupSeparator = "."; 


     CultureInfo.DefaultThreadCurrentCulture = cultureInfo; 
     CultureInfo.DefaultThreadCurrentUICulture = cultureInfo; 

     var supportedCultures = new[] 
     { 
      cultureInfo 
     }; 

     app.UseRequestLocalization(new RequestLocalizationOptions 
     { 
      DefaultRequestCulture = new RequestCulture("vi-VN"), 
      // Formatting numbers, dates, etc. 
      SupportedCultures = supportedCultures, 
      // UI strings that we have localized. 
      SupportedUICultures = supportedCultures 
     }); 

しかしStartup.cs /設定に入れます。

ビュー:

<input asp-for="money"/> => 123455,00ようなものを示しています。この値は計算のためにコントローラに返されるので、ToString( "N0")のような文字列形式ではない数値形式でなければなりません...

答えて

0

小数点のToStringは、それは一貫したリターンを持っていないので。それは元の数で利用可能な多くの小数を返します。小数点がない場合、小数点なしで整数を返します。

Cフォーマット指定子を使用して、金額であり、スレッドで指定されたカルチャに従うことを示す必要があります。

decimal x = 100.5555; 
Console.Write(x.ToString("C")); // Outputs 101 đ. Uses away from zero roundign. 
Console.Write(x.ToString()); // Outputs 100.5555. 

詳細については、Standard Numeric Format Stringsを参照してください。

編集:

がModelBinderを操作するには、ビューモデル自体にデータアノテーションを使用して書式を指定することができます。ここをクリックしてください:"asp-format" not applied to tag helpers

+0

問題は、<入力ASP-用=「お金」/>を表示するためにモデルを結合したときに、後に値が計算のためにコントローラに返すように、それは数でなければなりません。 –

+0

データアノテーションを使用できます。編集を確認してください。 –

+0

データアノテーションが機能しない場合、検証システムは「これは数字ではありません」などを生成します。多くの人がここで不平を言っています。https://stackoverflow.com/questions/39737607/aspnet-core-decimal-binding-not-working-on-non-英語の文化、またはここにhttps://github.com/aspnet/Mvc/issues/5331 –

関連する問題