Fix `Int64.toRadixStringUnsigned` extra leading digits (#926)

Currently `Int64.toRadixStringUnsigned` adds an extra '0' when the result is
single digit, e.g. '02' instead of '2'.

To be able to use the standard library `toRadixString`, we split the number
into two halves, then calculate the lowest digit and the rest of the digits
separately. With the lowest digit removed, the rest of the digits can be passed
as a positive integer to `toRadixString`. The resulting strings are then
concatenated to get the final result.

The problem occurs when the number can be printed as a single digit. In this
case the rest of the number is printed as '0', giving us e.g. '02' instead of
'2'.

To fix, we return early by calling the standard library `toRadixString` when
the number is positive.

This works because

- The problem is only when printing single digits (as the lowest digit and the
  rest are printed separately, and the problem is when the "rest" part is 0)

- Single-digit numbers need to have high 32-bits as zero (otherwise they'll be
  negative and printed as many digits, or positive but larger than single
  digit).

- When the high 32-bits are all zero, the number is positive, and can be
  converted to string directly with the standard library signed
  `toRadixString`.
2 files changed
tree: 8fcc515b7f6d155a73a9baf0704a1ebdcc2db17d
  1. .gemini/
  2. .github/
  3. pkgs/
  4. CONTRIBUTING.md
  5. LICENSE
  6. README.md
README.md

Overview

This repository is home to various Dart packages under the dart.dev publisher.

Packages

PackageDescriptionIssuesVersion
argsLibrary for defining parsers for parsing raw command-line arguments into a set of options and values using GNU and POSIX style options.issuespub package
asyncUtility functions and classes related to the ‘dart:async’ library.issuespub package
charactersString replacement with operations that are Unicode/grapheme cluster aware.issuespub package
collectionCollections and utilities functions and classes related to collections.issuespub package
convertUtilities for converting between data representations. Provides a number of Sink, Codec, Decoder, and Encoder types.issuespub package
cryptoImplementations of SHA, MD5, and HMAC cryptographic functions.issuespub package
fixnumLibrary for 32- and 64-bit signed fixed-width integers with consistent behavior between native and JS runtimes.issuespub package
lintsOfficial Dart lint rules. Defines the ‘core’ and ‘recommended’ set of lints suggested by the Dart team.issuespub package
loggingProvides APIs for debugging and error logging, similar to loggers in other languages, such as the Closure JS Logger and java.util.logging.Logger.issuespub package
os_detectPlatform independent OS detection.issuespub package
pathA string-based path manipulation library.issuespub package
platformA pluggable, mockable platform information abstraction for Dart.issuespub package
typed_dataUtility functions and classes related to the dart:typed_data library.issuespub package

Publishing automation

For information about our publishing automation and release process, see https://github.com/dart-lang/ecosystem/wiki/Publishing-automation.

For additional information about contributing, see our contributing page.