基于文化的字符串格式为十进制

时间:2012-04-02 06:26:05

标签: c# .net internationalization decimal rounding

我有一个十进制值,它存储在我的数据库(SQL Server 2008)中,精度为13,比例为10.

示例:

10.6157894734
68.0750000000
96.8723684210

基本上,这些数字代表100分中的“得分”。

现在,我想以不同的方式显示/表示这个值,具体取决于文化。

例如,在AU中,我希望显示100之外的值,向上舍入到2位小数。

所以在上面的例子中:

10.62
68.08
96.87

但是在美国,我希望显示10的值,向上舍入到小数点后1位。 所以在上面的例子中:

1.1
6.8
9.7

可以使用资源文件来完成,例如:

return score.ToString(Resources.Global.ScoreFormat);

它可以在en-US中存储为“#。##”,但在en-AU中存储为“#。#”

我很确定它不能,因为我不仅仅是四舍五入,而是使用数学转换? (例如,AU的值为10)但我想我会问这个问题。

我正试图避免一个丑陋的if语句来检查当前的文化并手动进行数学/舍入。

2 个答案:

答案 0 :(得分:2)

您需要在资源中放置修饰符和格式字符串,以便您可以执行类似

的操作
return (score * Resources.Global.ScoreModifier).ToString(Resources.Global.ScoreFormat);

答案 1 :(得分:1)

接受Phil的答案,但这是任何关心的人的实际修饰符/格式:

代码:

var formattedScore = (score / Convert.ToInt32(Global.ScoreModifier)).ToString(Global.ScoreFormat))

<强> Global.resx

ScoreFormat     n1  
ScoreModifier   10  

<强> Global.en-au.resx

ScoreFormat     n2  
ScoreModifier   1   

似乎工作......没有人发现问题?