【问题标题】:How to align floating point numbers in C# (left padding)如何在 C# 中对齐浮点数(左填充)
【发布时间】:2023-03-19 01:24:01
【问题描述】:

我有以下浮点数,所有小数点后两位:

2.47
57.83
93.92
119.20

我想将这些数字输出如下:

  2.47
 57.83
 93.92
119.20

如果字体不是等宽字体,我如何在 C# 中实现这一点?

编辑:

或者是否有任何不可见的字符占用与数字相同的水平空间?

【问题讨论】:

  • 您是将这些填充为decimals 还是将它们转换为string 然后填充它们?
  • 如果字体不是等宽字体,您必须有一些方法来测量您正在使用的特定字体的空间宽度和数字。老实说,如果这不是一个控制台应用程序,那么依赖您选择的 UI 框架提供的任何功能都会容易得多。
  • @Brian,我想将它们转换为 string,然后填充它们。
  • @p.s.w.g,实际上它是一个 Gtk.Label
  • 这可能会有所帮助:blog.stevex.net/string-formatting-in-csharp

标签: c# floating-point gtk# number-formatting


【解决方案1】:

试试string.Format("{0,6:F2}", number)

【讨论】:

  • 感谢您的回答,不幸的是它不起作用,因为它用空格填充,并且空格字符使用的水平空间比数字少。
  • @sergej 您提到的 Java 的 String.format 可以处理非固定宽度的字体吗?也许我太关注字符串而太少关注排版? .NET 中的字符串不包含有关印刷特征的信息,例如每个字形的宽度。
【解决方案2】:

我以前从未使用过Gtk#,但快速谷歌搜索发现this

label.Justify = Justification.Right;

与尝试将字符串操作到适当的宽度相比,这是一种更简单、更可靠的策略。

【讨论】:

  • @p.s.e.g,感谢您的回答,不幸的是它不起作用。我猜是因为我有一个MenuItem Label
  • @sergej 这似乎是XY problem 的完美示例。我建议您更新您的问题,详细说明您最终要完成的工作以及您遇到的问题。无论如何,看起来MenuItem 类有一个RightJustified 属性。
  • 顺便说一句,是的,有一个 figure space 应该与数字的宽度相同,但我仍然不推荐这种方法,除非你已经用尽了所有其他路线。
【解决方案3】:

我的解决方案是用figure space(U+2007)填充,它的宽度等于一个数字的宽度:

label.Text = number.ToString("0.00").PadLeft(6,'\x2007');

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 2016-08-13
    • 2014-07-27
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多