将文本数据转换为百分比(C#)

3

我正在将数据输入到文本字段中,需要将其显示为百分比。是否有函数可以执行此操作?

例如:在我的列中,我有值 "0.5", "0.1","0.2","0.25" 等,需要显示为 50%,10%,20%,25% 等。最好的方法是什么?


在WPF中,您可以使用转换器。请提供更多信息。是Winforms还是WPF?您的视图中有哪些对象等等。 - chris
使用WPF,您还可以直接在绑定中指定格式。 - Steve B
请查看以下内容:http://pranayamr.blogspot.ca/2012/06/format-number-to-display.html - Pranay Rana
2个回答

11

您应该分两个阶段完成此操作:

  • 将文本解析为数字,以便您以"真实"类型获得值。 (通常情况下,尽早从文本解析,并尽可能晚地格式化为字符串...在两者之间的操作将使用自然类型更简单。)
  • 使用百分比标准数值格式字符串将数字格式化为百分比。

因此:

decimal percentage = decimal.Parse(input);
string output = percentage.ToString("p0");

注:

  • 您应该考虑输入和输出的文化差异; 例如,您是否总是期望使用“.”作为小数分隔符?
  • 使用decimal而不是double来精确表示文本中的值(例如,文本可以有“0.1”,但double无法保持确切的0.1值)
  • 您可以向格式设置中添加所需的精度; 有关详细信息,请参见链接的文档; 例如,示例仅给出整数百分比

2
“p” 常常会在末尾多出小数位(例如 0.2 会变成 20.00%,如果我没记错的话)- 使用 “p0” 可能更好。 - Marc Gravell
@MarcGravell:我已经添加了注释 :) 将编辑以在示例中使用p0。 - Jon Skeet
一个典型的详细回答,+1 是为了考虑到文化敏感性。 - chris

4
最简单的方法是解析它(必须是double类型),然后将其转换回字符串,格式化为百分比。
var percentageString = double.Parse(doubleString).ToString("p1");

现在,你们中的一些高傲自大的人可能会说,在这种情况下使用十进制是正确的类型。

好吧,如果你需要额外的12-13位数字精度,那么是的。

然而,我们真正的人民(我一直坚持保持真实)对双精度浮点数的15-16位数字精度感到满意。

真正的选择是你的代码首先使用双精度浮点数还是十进制。如果你的代码使用双精度浮点数,请坚持使用双精度浮点数。如果使用了十进制,则应坚持使用十进制。你绝对不要多次转换两者之间,因为那里有风险。和意外的运行时错误可能会破坏你的数据。但主要是因为那里有风险。


3
在我看来,双精度浮点数是个不好的选择 - 输入数据本来就是十进制的,为什么要使用双精度呢? - Jon Skeet
3
@JonSkeet:你,别再显摆聪明了。 - user1228

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