2012-04-02 35 views
2

我有一个十进制值,它存储在我的数据库(SQL Server 2008中)与13精度,以及10文化为基础的字符串格式化十进制

例子规模:

10.6157894734 
68.0750000000 
96.8723684210 

基本上,数字代表一个“得分”出100

现在,我想显示/表示该值以不同的方式,这取决于培养。

例如,在AU中,我想显示100以外的值,四舍五入到小数点后两位。

所以在上面的例子:

10.62 
68.08 
96.87 

但在美国,我想显示出值为10,四舍五入至小数点后1位。 所以在上面的例子:

1.1 
6.8 
9.7 

这个问题能有一个资源文件来完成,比如做这样的事情:

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

凡可以存储为“###”。 in en-US,但“#。#” in en-AU?

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

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

+0

希望'1.6'是一个错字,实际上是'1.1'? – V4Vendetta 2012-04-02 06:31:34

+0

@ V4Vendetta - 哈哈,是。 – RPM1984 2012-04-02 06:32:00

+0

我想这个问题不是关于为类分数所属的实现自定义的ToString,能够处理你需要的东西......虽然......如果“格式化程序”可以触发类的方法来处理要格式化的数据,例如“#{CountryDepFmt}”将实例化CountryDepFmt(符合一些已知的接口),该接口将返回格式化的值并且也可以进行某种操作。如果区域是Au返回(值/ 10).ToString(“#。#”);或者任何正确的C#语法。 – ShinTakezou 2012-04-02 06:44:11

回答

2

你将需要把改性剂和在你的资源格式字符串,这样你可以这样做

return (score * Resources.Global.ScoreModifier).ToString(Resources.Global.ScoreFormat); 
+0

ahhh ...现在你的东西...只需要弄清楚修饰符/格式是什么... – RPM1984 2012-04-02 06:32:37

+0

明白了。将为任何关心的人添加答案,并且在Stack允许我这样做时接受这个答案。 – RPM1984 2012-04-02 06:40:18

1

接受菲尔的答案,但是这是一个任何人的实际改性剂/格式谁在乎:

代码:

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

Global.resx

ScoreFormat  n1 
ScoreModifier 10 

Global.en-au.resx

ScoreFormat  n2 
ScoreModifier 1 

似乎work..anyone发现了一个问题吗?

+0

出于某种原因,我认为你可以添加一个数字资源 - 你的解决方案是好的。 – Phil 2012-04-02 06:55:03

+0

@Phil - 数字?我认为所有的C#资源字符串实际上是字符串..因此int强制是必要的吗? – RPM1984 2012-04-02 06:58:09

+0

是的你是正确的,我想说我没有想直接:) – Phil 2012-04-02 06:59:39

相关问题