Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如有必要,仅以十进制显示基于语言的逗号分隔符_C#_Asp.net Mvc_String Formatting - Fatal编程技术网

C# 如有必要,仅以十进制显示基于语言的逗号分隔符

C# 如有必要,仅以十进制显示基于语言的逗号分隔符,c#,asp.net-mvc,string-formatting,C#,Asp.net Mvc,String Formatting,我有一个基于Globalize的项目集,它使用葡萄牙语“pt pt”,因此十进制数字用逗号“,”分隔 如果可能的话,我不希望在属性的格式中设置逗号 我现在拥有的代码(型号): 观点: @Html.EditorFor(model => model.SizeOpenedWidth, new { htmlAttributes = new { @class = "form-control" } }) 问题是该解决方案在模型中使用逗号“,”harcoded,并为十进制“11,01”显示值“

我有一个基于Globalize的项目集,它使用葡萄牙语“pt pt”,因此十进制数字用逗号“,”分隔

如果可能的话,我不希望在属性的格式中设置逗号

我现在拥有的代码(型号):

观点:

    @Html.EditorFor(model => model.SizeOpenedWidth, new { htmlAttributes = new { @class = "form-control" } })
问题是该解决方案在模型中使用逗号“,”harcoded,并为十进制“11,01”显示值“11”

编辑1:

我能够找到问题:

{0:#,##} -> {0:#.##}
我用“.”替换了“,”,它现在可以工作了,它采用了全球化的葡萄牙语格式“11,01”

是否可以用这种字符串格式表示“11,1”和“11,10”

编辑2:


解决方案{0:#.##}会产生问题,1“出现”,1“

您不需要也不应该在模型中硬编码格式。我不确定您为什么不在web.config中使用以下行:

<globalization culture="pt-PT" uiCulture="pt-PT" />


如果问题是小数点后2位,那么这就是MVC中默认的十进制编辑器的工作方式。一个简单的解决方案是使用TextBoxFor而不是EditorFor(因为您实际上不想使用十进制编辑器的功能)。

如果您的区域性使用十进制逗号,则数字格式将用点替换逗号

确定小数分隔符在结果字符串中的位置

更多信息:“.”自定义说明符。
0.45678(“0.00”,美国本土)->0.46
0.45678(“0.00”,fr)->0,46


因此,尽管“.”和“,”分别用于表示区域设置的十进制分隔符和千位分隔符。

也许不是这样-ASP.NET在决定使用哪个区域设置时会考虑浏览器的区域设置。即使需要允许用户指定自己的区域设置,也可以通过设置线程的区域性来实现。这可以通过使用路线参数来实现,如Hi@Anton中所示,谢谢你的回答,但使用你的解决方案,我仍然得到格式“11,00”,我只想在没有小数点的情况下显示“11”。啊,没有抓住要点,抱歉-请查看更新的答案。抱歉@Anton,但我不理解你的更新和评论:(好的,我的意思是您确实使用了@Html.EditorFor(model=>model.sizePenedWidth,…),对吗?但是,如果您实际上不希望生成的文本输入按照EditorFor helper定义的方式运行,那么使用EditorFor helper的目的是什么呢?因此,您可以使用@Html.TextBoxFor(…)helper,它将按您希望的方式运行(希望如此)。除了硬编码是一个问题外,格式完全错误。在格式字符串中,
始终是千位分隔符,并简单地指定特定于区域性的分隔符将出现的位置。在您的情况下,您要求的不是十进制值(格式字符串中没有小数点分隔符)。Hi@PanagiotisKanavos谢谢,但我不理解您的问题。类型为decimal,我的问题是目前的代码没有显示小数点“11,01”的小数部分“01”如果要显示任何小数,需要在格式字符串中添加小数分隔符,例如
,#####.##
。您只输入了千位分隔符。此
1000.01。ToString(“#,###”)
将在Protuguese区域设置中返回“1.000”和“1000”在英语区域设置中。您无法更改格式字符串中用于小数分隔符的字符。为此,您需要更改正在执行的线程的当前区域性,或使用页面方向指定其他区域性是,这就是为什么我现在在DataFormatString中使用“.”分隔符的原因:)还要检查路由参数用于设置线程的localeHi@Übercoder的位置谢谢你的回答,但问题在于我得到的格式是“11,00”,我只想给出“11”当我没有任何小数部分时。@Patrick-很抱歉误解了。在这种情况下,您需要做的就是将格式规范更改为:
[DisplayFormat(DataFormatString=“{0:#}”,ApplyFormatInEditMode=true)]
我已经尝试过了,但是对于“11,01”,当我编辑值时,我得到了“11”@Patrick那么让我们直说吧-对于完整的数字,您不希望打印
,00
,但是对于有小数点的值,您确实希望打印该小数点?如果是这样,只需从格式说明符中删除
:#
。让CLR执行默认格式-如果我删除,这似乎是您想要的:#d只设置{0},我得到“10,00”,我只想要“10”
<globalization culture="pt-PT" uiCulture="pt-PT" />