2012-10-26 393 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); 

,然后你可以从你的观点称呼它,如果Amountfloat

@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不起作用,因为它会导致其他错误。我可以举一个例子:当我尝试在Number中转换默认格式的字符串(例如“14543.12”)时,它会引发错误。这是有道理的。感谢您的帮助,无论如何 –

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( “N2”) - 这在ASP.Net MVC剃刀为我工作。

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

截至今天,在当前稳定版本'4'中不再支持jQuery的旧记法,这是行不通的,只需使用'new AutoNumeric('#DEMO' )'你很好走! – Alex

相关问题