【问题标题】:How to use string format to omit period but leave digits如何使用字符串格式省略句点但留下数字
【发布时间】:2019-05-23 22:50:37
【问题描述】:

我有格式字符串 ######.00 用于在 C# 中格式化小数。我需要对其进行更改,使其省略句点,但保留句点后面的数字。我可以仅通过更改格式来完成此操作吗?我已经搜索过,但无法在线找到解决方案。

我发现this answer 有一个非常相似的问题,但它涉及在格式化之前将小数乘以 100。我无法操纵输入的数字,也无法操纵生成的字符串,因为我无权访问它们。这是因为我们使用了来自第三方库的函数,该函数从其他地方获取数字并将其格式化显示到 UI。我只能为它提供一个格式字符串。 (如果操作数字或结果字符串是我们可以做到的格式的唯一方法,它只需要大量的重构,所以我想先看看是否有更简单的解决方案。因此限制。 )

作为我正在寻找的输出示例,请考虑以下代码:

var myFormat = "{0:######.00}";
Console.WriteLine(string.Format(myFormat, 1234.1234));
Console.WriteLine(string.Format(myFormat, 5));

上面的代码目前输出1234.125.00,但我希望它输出123412500,只需更改myFormat。有没有办法做到这一点?

【问题讨论】:

  • 为什么不能操作数字或结果字符串?您是否可以使用 string.Format 的不同重载?
  • I'm not able to manipulate the number, nor the resulting string, only the format string. 你能告诉我们这个限制吗? 为什么你只有这个工具?
  • @mjwills P2 保留小数点以及百分比。我也在考虑{0:#%},但我猜剩下的% 标志是一个交易破坏者。
  • 为什么不简单地乘以 100 并取 int 部分而不是使用字符串格式?
  • @yiabiten 阅读问题的第二段

标签: c# string format string-formatting


【解决方案1】:

如果您只能更改格式字符串,则可能无法删除点。
但是,您可以实现自己的Formatter,作为 MSDN 的示例。

string.Format(new CustomerFormatter(), "{0}", 1234.1234)

【讨论】:

  • 我刚刚尝试创建一个自定义 NumberFormatInfo 但“Decimal separator cannot be the empty string”另外,这个答案与你一致:stackoverflow.com/questions/24664360/…
  • 我认为你是对的,没有一种方法可以仅使用格式字符串来完成我想要的事情(我还没有找到方法)。对我们来说,使用 CustomFormatter 可能是涉及最少重构的解决方案,所以感谢您的回答。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
相关资源
最近更新 更多