我刚注意到Char.IsNumber函数接受罗马数字(除其他外)作为数字。 https://msdn.microsoft.com/en-us/library/y8t708dh%28v=vs.110%29.aspx
但罗马数字将是字符串(" III"," IV")或字母(" V"," X"),如何将罗马数字输入此方法以使其返回true?
这让我想知道还有什么可以输入,我们可能不认为是一个数字。 数字符号(#)从我发现的Char.IsSymbol方法返回false,例如。
答案 0 :(得分:4)
但罗马数字将是字符串(“III”,“IV”)......
一般来说,罗马数字往往是string
,而不是char
,这是正确的。
但是,对于某些特定的罗马数字--Ⅰ,Ⅱ,Ⅲ,Ⅳ,...,Ⅻ,Ⅼ,Ⅽ,Ⅾ,Ⅿ,以及它们的小写版本 - Unicode具有专用(非代理)代码点。我刚刚用过它们!有关详细信息,请参阅以下资源:
请注意,这些数字中的每一个都是单(非代理)Unicode代码点,因此只适用于一个.NET System.Char
。
...如何将罗马数字输入此方法以使其返回true?
这是VB.NET中的一个例子:
Dim romanNumeralFour As Char = ChrW(&H2163) ' or: "Ⅳ"c
Assert.IsTrue(Char.IsNumber(romanNumeralFour))
这是C#版本:
const char romanNumeralFour = '\u2163'; // or: 'Ⅳ'
Assert.IsTrue(char.IsNumber(romanNumeralFour));
与Hans Passant commented above一样,请注意,如果您使用拉丁字母,例如M
,则无效;罗马数字Ⅿ
是一个不同的字符,即使它看起来可能相同(取决于您的显示字体)!
这让我想知道还有什么可以输入,我们可能不认为是一个数字。
对于这些Unicode字符类别中的任何字符,该方法应该返回True
: