将 Char.GetNumericValue() 转换为 int 会破坏信息吗?

Will converting Char.GetNumericValue() to int destroy information?

我正在实施 GetHashCode()。我想对名为 string Id 的 属性 中的值求和,然后除以 通过一些常数和 return 结果。我正在使用 GetNumericValue():

int sum = 0;
 foreach (var ch in Id)
  sum += char.GetNumericValue(ch);

不过好像是GetNumericValuereturnsdouble。可以将其转换为 int 吗?

我以为Unicode个字符是用整数表示的,为什么是doublereturn? 可以忽略它吗?

是的,它会丢失某些值的数据,因为这是 的 unicode 字符的数值本身是数字 - 并且 unicode 包含非整数的字符:

var val = char.GetNumericValue('½'); // or ¼, or ꠲, or ⳽
System.Console.WriteLine(val);

Why is double returned?

虽然 0-9 是标准数字,但实际上有一些 Unicode 字符表示数字,其中一些是浮点数,如 ½.让我们举个例子:

var ch = char.GetNumericValue('½');
Console.WriteLine(ch);// 0.5 output