【问题标题】:Format decimal to two places or a whole number将小数格式化为两位或整数
【发布时间】:2011-01-10 00:49:50
【问题描述】:

对于 10,我想要 10 而不是 10.00 对于 10.11,我想要 10.11

没有代码这可能吗?即通过单独指定格式字符串类似于 {0:N2}

【问题讨论】:

标签: c# .net string formatting


【解决方案1】:
decimal num = 10.11M;

Console.WriteLine( num.ToString( "0.##" ) );

【讨论】:

  • 这不起作用 - 十进制数 = 10.1;我能想到的最好的方法是: num .ToString("C").Replace(".00", "");任何对此案有答案的人都会帮助我!
  • @Dave - 什么不起作用?除非它们为零,否则您是否只想要 2 位小数?
  • @Dave - num % 1 == 0 ? num.ToString("0") : num.ToString("0.00"); 怎么样?你可以将它作为十进制的扩展方法来实现。
  • Console.WriteLine(num.ToString("0.00"));即使值为零,也会强制 2 DP。即“0.00”或“0.10”等。不要忘记默认行为是从 .005 向上舍入而不是向下舍入。
  • @dotNETNinja 这正是 Dave 所要求的。不过,回想起来,我可能会使用decimal.Truncate(num) == num 而不是 mod by 1。
【解决方案2】:

在我看来,小数精度是小数类型固有的,默认为 4 位小数。如果我使用以下代码:

decimal value = 8.3475M;
Console.WriteLine(value);
decimal newValue = decimal.Round(value, 2);
Console.WriteLine(newValue);

输出是:

8.3475
8.35

【讨论】:

  • 我认为这不能回答 Neil 的问题。
【解决方案3】:

这可以使用 CultureInfo 来实现。使用以下 using 语句导入库。

using System.Globalization;

对于小数转换,## 可用于可选小数位,00 可用于强制小数位。检查以下示例

double d1 = 12.12;
Console.WriteLine("Double :" + d1.ToString("#,##0.##", new CultureInfo("en-US")));

String str= "12.09";
Console.WriteLine("String :" + Convert.ToDouble(str).ToString("#,##0.00", new CultureInfo("en-US")));

String str2 = "12.10";
Console.WriteLine("String2 with ## :" + Convert.ToDouble(str2).ToString("#,##0.##", new CultureInfo("en-US")));
Console.WriteLine("String2 with 00 :" + Convert.ToDouble(str2).ToString("#,##0.00", new CultureInfo("en-US")));


int integ = 2;
Console.WriteLine("Integer :" + Convert.ToDouble(integ).ToString("#,##0.00", new CultureInfo("en-US")));

结果如下

Double :12.12
String :12.09
String2 with ## :12.1
String2 with 00 :12.10
Integer :2.00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多