docs: function toPrecision( number, places, truncation ) {
     // Define a maximum precision for truncation=NONE, taking into account 32bit machine limits.
     // We cannot use Number.toFixed because of rounding errors in MSIE8.
     const MAX_SIGNIFICANT_PLACES = 14;
  
     const actualPlaces = truncation === 'NONE' ? MAX_SIGNIFICANT_PLACES : places;
  
     if( actualPlaces === 0 ) {
        return `${Math.round( number )}`;
     }
  
     const multiplier = Math.pow( 10, actualPlaces );
     let str = `${Math.round( number * multiplier ) / multiplier}`;
  
     // Detect and avoid scientific notation for numbers x where |x| << 10^(-5)
     // A heuristic is used to avoid unnecessary string operations for "regular" numbers
     const absNumber = Math.abs( number );
     if( absNumber < 0.0001 ) {
        const exponent = parseInt( str.split( 'e-' )[ 1 ], 10 );
        if( exponent ) {
           const base = `${Math.pow( 10, exponent - 1 ) * Math.round( absNumber * multiplier ) / multiplier}`;
           str = `${number < 0 ? '-' : ''}0.${zeros( exponent - 1 ) + base.substring( 2 )}`;
        }
     }
  
     if( truncation === 'BOUNDED' || truncation === 'NONE' ) {
        return str;
     }
  
     const tmp = str.split( '.' );
     if( tmp.length === 1 ) {
        return `${str}.${zeros( actualPlaces )}`;
     }
  
     return str + zeros( actualPlaces - tmp[ 1 ].length );
  }