C#相当于这个VB6字符串格式?

时间:2014-03-25 15:21:15

标签: c# vb6-migration

我将一个古老的VB6程序转换为C#,我遇到了一些看起来像这样的VB6代码。 。 。

   Format(part(PI).far_xdev, " #0.000;-#0.000")

起初我对用分号分隔的两个格式字段感到困惑。但事实证明,在VB6中,这意味着如果被格式化的数字的值为0或正数,则它使用第一个,如果它为负,则使用第二个。如果有三个格式化字段,则为正,负和零;四个是正面,负面,零和零。

C#字符串格式中的等价物是什么?我该怎么说"将这个格式化字符串用于正数,而将一个用于负数#34;

(对于添加了&#34的人;这个问题可能已经有了答案":该链接的问题在于引用链接问题参考某些版本的BASIC(基于语法)并且没有明确说他在C#中寻找答案,并且两个答案都没有明确说明他们是在C#中。我们只能根据标签推测所涉及的语言。我认为这个新问题和得到的答案是更清晰,明确和详细)

2 个答案:

答案 0 :(得分:5)

通过半列使用相同的分隔。在msdn了解有关该分隔符的更多信息(最多支持三个部分)

Console.WriteLine("{0:positive;negative;zero}", +1); //prints positive
Console.WriteLine("{0:positive;negative;zero}", -1); //prints negative
Console.WriteLine("{0:positive;negative;zero}", -0); //prints zero

您可以在数值上使用ToString并在那里传递格式

string formatted = 1.ToString("positive;negative;zero"); //will return "positive"

或使用string.Format,如评论部分所示。但您仍然需要将订单位置{0}传递给它。

string formatted = string.Format("{0:positive;negative;zero}", 1); 

为了检查null,您可以使用null合并运算符(需要强制转换为对象,因为没有从int?string的隐式强制转换)。它变得非常混乱,所以我建议考虑简单的if语句。

int? v = null;
var formatted = string.Format("{0:positive;negative;zero}", (object) v ?? "null");

答案 1 :(得分:4)

C#支持相同的自定义格式:

string.Format("{0:#0.000;-#0.000}",part(PI).far_xdev);

请注意,您使用的格式与带有3位有效数字的标准定点格式相同:

string.Format("{0:F3}",part(PI).far_xdev);