将十进制数格式化为两位小数或整数

43

我想要的是10而不是10.00

我想要的是10.11,这可否在不使用代码的情况下实现?例如通过仅指定格式字符串,类似于 {0:N2}。


@RyanGates,是新问题的重复吗? :P - Andrew
我的建议是这个:https://dev59.com/7Ww05IYBdhLWcg3w6F8w#33180829 - Andrew
1
@Andrew 一个较早的问题可以成为一个较新问题的重复,前提是有更好的答案。http://meta.stackoverflow.com/q/251938/299327 - Ryan Gates
1
@RyanGates,谢谢你!在标记时,它只是说“此问题已经被提出并已有答案”。我同意另一个线程比这个更完整。 :) - Andrew
4个回答

48
decimal num = 10.11M;

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

3
这段代码不起作用 -decimal num = 10.1;我能想到的最好的解决方案是:num.ToString("C").Replace(".00", "");如果有人能提供此情况的答案,将对我很有帮助! - Dave Bish
@Dave - 有什么问题吗?是不是你想要恰好两位小数,除非它们是零? - tvanfosson
5
@Dave - 如何看待 num % 1 == 0 ? num.ToString("0") : num.ToString("0.00"); 这段代码?你可以将其实现为 decimal 的扩展方法。 - tvanfosson
Console.WriteLine( num.ToString( "0.00" ) ); 强制显示两位小数,即使值为零。例如:"0.00" 或者 "0.10" 等。不要忘记默认行为是四舍五入到 0.005。 - Microsoft Developer
@dotNETNinja,这就是Dave所要求的。回想起来,我可能会使用decimal.Truncate(num) == num而不是模1的方法。 - tvanfosson
这在mono下对我有效...如果你真的必须使用字符串操作来做到这一点,请不要忘记使用string.trimRight(new char[]{'0'})来修剪任何尾随的零 - 但是请先检查是否有小数分隔符。 - Radu Simionescu

4

我认为十进制精度是固有于十进制类型的,它的默认值为4位小数。如果我使用以下代码:

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

输出结果为:
8.3475
8.35

3
我认为这并没有回答Neil所问的问题。 - Andrew

1

可以使用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

0
将数字转换为decimal,然后使用格式化字符串"#,##0.##"ToString方法。
该格式表示“对于大于3位数的值,使用千位分隔符。始终在小数点前显示一位数字。可选择显示最多2位小数。”
decimal a = 5000000;
decimal b = 5000;
decimal c = 5;
decimal d = 2.5m;
decimal e = 0.0005m;
decimal f = 0.45m;
decimal g = 0.499m;
decimal h = 0.51515m;
decimal i = 123456.789m;
decimal j = 10.1m;

// Answers in my English localization       
string format = "#,##0.##";
Console.WriteLine("a=" + a.ToString(format)); // 5,000,000
Console.WriteLine("b=" + b.ToString(format)); // 5,000
Console.WriteLine("c=" + c.ToString(format)); // 5
Console.WriteLine("d=" + d.ToString(format)); // 2.5
Console.WriteLine("e=" + e.ToString(format)); // 0
Console.WriteLine("f=" + f.ToString(format)); // 0.45
Console.WriteLine("g=" + g.ToString(format)); // 0.5
Console.WriteLine("h=" + h.ToString(format)); // 0.52
Console.WriteLine("i=" + i.ToString(format)); // 123,456.79
Console.WriteLine("j=" + j.ToString(format)); // 10.1

如果您需要保留两位小数,可以使用"#,##0.00",但是这将始终显示整数的 .00。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接