我需要格式化一个像“1.2452”这样的数字来显示“452”所以我不想看到所有的数字。问题是,我无法直接控制显示数字,我只能通过根据 NumberFormatInfo 类设置类型的格式字符串来格式化它。这可能吗,如果可以,怎么办?
干杯
编辑:
我发现我可以订阅“FormatEvent”,这使我能够在数字格式化后将自定义格式作为字符串。感谢大家的帮助和洞察力!:)
我需要格式化一个像“1.2452”这样的数字来显示“452”所以我不想看到所有的数字。问题是,我无法直接控制显示数字,我只能通过根据 NumberFormatInfo 类设置类型的格式字符串来格式化它。这可能吗,如果可以,怎么办?
干杯
编辑:
我发现我可以订阅“FormatEvent”,这使我能够在数字格式化后将自定义格式作为字符串。感谢大家的帮助和洞察力!:)
您可以通过实现 IFormatter 创建自己的格式说明符。但是对于已经融入 .NET 的类型,您不能这样做。像 System.Double 或 System.Decimal,或任何值为 1.2452 的变量类型。为这些标准 .NET 类型提供的格式说明符不允许选取最后 3 个数字。
具有更改的 NumberFormatInfo 的自定义区域性无法让您对格式进行足够的控制。
您需要控制实际值。然后很简单。
我很确定这是不可能的,因为您只能从最不重要到最重要的部分过滤掉。
我想我们需要确切地知道格式化数字所需的算法。但是您可以将其转换为字符串,然后只做一个子字符串。
使用.net
[math]::pi *-- give 3.1415926538979*
([math]::pi).tostring().split(".")[1] *-- gives: 14159265358979*
([math]::pi).tostring().split(".")[1].substring(0,4) *-- Gives : 1415*
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;
}
}