2016-12-30 62 views
1

我需要将格式应用于decimal类型的数字。假设12345必须以## ##0,0的格式显示。然后,所需的输出是12 345,0。但不知何故,它不适用,我得到的结果为1 2,345格式不适用于法国文化

以下是执行格式化工作的代码。同时检查这个fiddle我的问题被复制。

修订

CultureInfo ci = new CultureInfo("fr-FR"); 
decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.ToString("## ##0,0")); 

我知道已经有可用,但无法得到什么不对的方式很多格式相关的解决方案。

+0

你似乎没有使用任何你设置的ci细节......你有尝试过使用它吗? – BugFinder

+0

您必须首先在线程上设置当前文化,因为您并未在任何地方使用新文化。 c#将如何知道如何使用您创建的文化。 –

+0

@DirtyDeveloper是的,这是我在创建示例代码时犯的错误。可以检查更新并仍然是相同的问题。 – JDoshi

回答

2

您没有使用创建的文化信息格式化数字。 另外,您的格式说明符不正确。您必须始终使用POINT作为格式字符串中的小数点分隔符,然后将其替换为文化特定的小数点分隔符(fr-FR的逗号)。

下应能正常工作:这里

integral.ToString("## ##0.0", ci) 
+0

用'.'确实有效,但是我怎么才能用'''来实现。我认为''''可以用'decimal separator',但我不知道如何: – JDoshi

+0

需要应用的格式是从用户输入接收的,通常它应该与''一起工作,因此它应该可以和Excel一起工作 – JDoshi

+0

@JDoshi不幸的是,格式说明符是独立于设计文化的,如果你确信最终用户的文化,你可以执行一个简单的“用逗号替换“ – Mr47

0

您可以使用此功能:

public static string FormatNumber(this double number) 
     { 
      return number.ToString("#,##0.00"); 
     } 

然后调用你的函数,如:

decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.FormatNumber());