2012-10-26 1 views

ответ

0

Я буду размещать код, который, наконец, работал для меня. На контроллере, на функцию 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)) 
+1

Как это отличается от того, что я разместил ниже :(Рад, что у вас это получилось! – Tommy

+0

Это другое, потому что мне не нужно писать 5 строк кода вместо одного, когда мне просто нужно отформатировать номер Ваше сообщение действительно полезно и вдохновляло, спасибо –

0
string.Format("{0:N2}", yourLovelyNumber); 
+0

нормально, но я хочу, чтобы указать отдельно десятичные и тысячи разделителей, как я могу это сделать? –

4

Вы можете создать DisplayTemplate, который обработает как числа, как это отображается в ваших просмотров:

/Views/Shared/DisplayTemplates/float.cshmtl:

@model float 
@string.Format("{0:N2}", Model); 

, а затем вы можете назвать это как это от ваших взглядов, если Amount имеет тип float:

@Html.DisplayFor(m => m.Amount) 
+0

Как этот шаблон ссылается тогда? –

3

Чтобы управлять разделителем тысяч, вы должны применить свои изменения к 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 
+0

Обновление System.Threading.Thread.CurrentThread.CurrentCulture не работает, потому что это вызвало дополнительные ошибки. Я могу привести пример: когда я пытаюсь преобразовать строку в формате по умолчанию (например, «14543.12») в Number, это вызовет ошибку. Что это имеет смысл. Спасибо за вашу помощь, так или иначе –

2

Чтобы получить то, что вы ищете, вам необходимо указать собственный формат номера. Here is the 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 

Некоторые сведения о NumberFormat class from the MSDN

1

variable.ToString ("П2") - Это работает для меня в ASP.Net MVC Razor.

0

Я была такая же проблема и может рекомендовать 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.

+0

На сегодняшний день старая нотация с jQuery больше не поддерживается в текущей стабильной версии '4'. Это не сработает. Просто используйте' new AutoNumeric ('# DEMO') 'и вам хорошо идти! – Alex