【问题标题】:VB.Net - Char.IsNumber input Roman numeralsVB.Net - Char.IsNumber 输入罗马数字
【发布时间】:2026-02-02 19:00:01
【问题描述】:

我刚刚注意到 Char.IsNumber 函数接受罗马数字(除其他外)作为数字。 https://msdn.microsoft.com/en-us/library/y8t708dh%28v=vs.110%29.aspx

但是罗马数字可能是字符串(“III”、“IV”)或字母(“V”、“X”),如何在这个方法中输入罗马数字使其返回 true?

这让我想知道还有什么我们可能不认为是数字的输入。 数字符号 (#) 从我发现的 Char.IsSymbol 方法中返回 false,例如。

【问题讨论】:

  • 微软的反向兼容是传奇。但是不,Char.IsNumber("V"c) 返回 False。您必须使用 Unicode 中的专用字形才能使其正常工作,例如 U+2164。又名“Ⅴ”c.

标签: vb.net char roman-numerals


【解决方案1】:

但罗马数字会是字符串(“III”、“IV”)……

一般来说,您是正确的,罗马数字往往是 strings,而不是 chars。

但是,对于某些特定的罗马数字——Ⅰ、Ⅱ、Ⅲ、Ⅳ、…、Ⅻ、Ⅼ、Ⅽ、Ⅾ、Ⅿ,以及它们的小写版本——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

【讨论】:

最近更新 更多