0

我需要格式化一个像“1.2452”这样的数字来显示“452”所以我不想看到所有的数字。问题是,我无法直接控制显示数字,我只能通过根据 NumberFormatInfo 类设置类型的格式字符串来格式化它。这可能吗,如果可以,怎么办?

干杯

编辑:

我发现我可以订阅“FormatEvent”,这使我能够在数字格式化后将自定义格式作为字符串。感谢大家的帮助和洞察力!:)

4

5 回答 5

2

您可以通过实现 IFormatter 创建自己的格式说明符。但是对于已经融入 .NET 的类型,您不能这样做。像 System.Double 或 System.Decimal,或任何值为 1.2452 的变量类型。为这些标准 .NET 类型提供的格式说明符不允许选取最后 3 个数字。

具有更改的 NumberFormatInfo 的自定义区域性无法让您对格式进行足够的控制。

您需要控制实际值。然后很简单。

于 2010-09-29T14:07:28.590 回答
0

我很确定这是不可能的,因为您只能从最不重要到最重要的部分过滤掉。

于 2010-09-29T13:46:11.240 回答
0

我想我们需要确切地知道格式化数字所需的算法。但是您可以将其转换为字符串,然后只做一个子字符串。

于 2010-09-29T14:02:40.167 回答
0

使用.net

[math]::pi                             *-- give 3.1415926538979*
([math]::pi).tostring().split(".")[1]  *-- gives: 14159265358979*
([math]::pi).tostring().split(".")[1].substring(0,4) *-- Gives : 1415*
于 2010-09-29T15:55:11.133 回答
0

NumberFormatInfo 没有提供足够的灵活性来适应这种(奇怪的)格式。我建议只使用一个 ReadOnly 属性来相应地格式化您的号码......

public string NumberFormatted
{
    get
    {
        string num = YourNumber.ToString();
        int index = num.IndexOf(".");
        if(index > -1 && index < num.Length - 2)
            num = num.Substring(index + 2);
        return num;
     }
}
于 2010-09-29T16:03:27.547 回答