Будет ли преобразование Char.GetNumericValue () в int уничтожать информацию? - PullRequest
2 голосов
/ 14 апреля 2020

Я реализую GetHashCode(). Я хочу суммировать значения в свойстве под названием string Id, затем разделить на некоторую константу и вернуть результат. Я использую GetNumericValue():

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

Но, похоже, GetNumericValue возвращает double. можно ли преобразовать его в int?

Я думал, что Unicode символы представлены целым числом, почему возвращается double? И можно ли это игнорировать?

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Почему возвращается double?

Хотя 0-9 являются стандартными цифрами, на самом деле есть некоторые Unicode символы, которые представляют числа, некоторые из них являются плавающими Точка, как или ½. Давайте возьмем пример:

var ch = char.GetNumericValue('½');
Console.WriteLine(ch);// 0.5 output
0 голосов
/ 14 апреля 2020

Да, он потеряет данные для некоторых значений , поскольку это числовое значение символов Unicode, которые сами являются числами - и Unicode включает символы, которые являются нецелыми числами:

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