Я считаю, что документы здесь неправильные, и стоит открыть радар по этому поводу.Когда значение не установлено, оно интерпретируется как «нормальный кернинг».Когда 0 установлен, это интерпретируется как «отключить кернинг», поэтому ширина немного шире (кернинг обычно немного отрицателен, в результате чего в этом шрифте появляются символы пары керн, такие как «W» и «o», немногоближе).Я не думаю, что есть какой-либо способ явно запросить «кернинг по умолчанию» без удаления атрибута.
Для ваших целей я считаю, что вы делаете правильную вещь, удаляя значение, когда оно равно нулю, потому что вы хотитекернинг по умолчанию, а не отключение кернинга.
Причина, по которой ваше крошечное отрицательное значение работает, заключается в том, что он не равен нулю, поэтому он не отключает кернинг, но он настолько мал, что поведение очень, очень близко к значению по умолчанию,и вы работаете с точностью Double в промежуточных вычислениях (или, возможно, с точностью Float, в зависимости от того, как она реализована внутри).Вы должны обнаружить, что ваш тест проходит для любого значения, меньшего (ближе к нулю), чем это, а не только это значение.В моих тестах положительный 7e-15 также работает, например.