13aa366b9b5327c0016f5fb65e1645425dc8f78145aedeaa3f9bc7092bc1b70947e06b78dc219faf3f311bfb5699e75009655536973a67cea401addbb4b764 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /**
  2. * Linear mapping a value from domain to range
  3. * @param val
  4. * @param domain Domain extent domain[0] can be bigger than domain[1]
  5. * @param range Range extent range[0] can be bigger than range[1]
  6. * @param clamp Default to be false
  7. */
  8. export declare function linearMap(val: number, domain: number[], range: number[], clamp?: boolean): number;
  9. /**
  10. * Convert a percent string to absolute number.
  11. * Returns NaN if percent is not a valid string or number
  12. */
  13. export declare function parsePercent(percent: number | string, all: number): number;
  14. /**
  15. * (1) Fix rounding error of float numbers.
  16. * (2) Support return string to avoid scientific notation like '3.5e-7'.
  17. */
  18. export declare function round(x: number | string, precision?: number): number;
  19. export declare function round(x: number | string, precision: number, returnStr: false): number;
  20. export declare function round(x: number | string, precision: number, returnStr: true): string;
  21. /**
  22. * Inplacd asc sort arr.
  23. * The input arr will be modified.
  24. */
  25. export declare function asc<T extends number[]>(arr: T): T;
  26. /**
  27. * Get precision.
  28. */
  29. export declare function getPrecision(val: string | number): number;
  30. /**
  31. * Get precision with slow but safe method
  32. */
  33. export declare function getPrecisionSafe(val: string | number): number;
  34. /**
  35. * Minimal dicernible data precisioin according to a single pixel.
  36. */
  37. export declare function getPixelPrecision(dataExtent: [number, number], pixelExtent: [number, number]): number;
  38. /**
  39. * Get a data of given precision, assuring the sum of percentages
  40. * in valueList is 1.
  41. * The largest remainer method is used.
  42. * https://en.wikipedia.org/wiki/Largest_remainder_method
  43. *
  44. * @param valueList a list of all data
  45. * @param idx index of the data to be processed in valueList
  46. * @param precision integer number showing digits of precision
  47. * @return percent ranging from 0 to 100
  48. */
  49. export declare function getPercentWithPrecision(valueList: number[], idx: number, precision: number): number;
  50. /**
  51. * Get a data of given precision, assuring the sum of percentages
  52. * in valueList is 1.
  53. * The largest remainer method is used.
  54. * https://en.wikipedia.org/wiki/Largest_remainder_method
  55. *
  56. * @param valueList a list of all data
  57. * @param precision integer number showing digits of precision
  58. * @return {Array<number>}
  59. */
  60. export declare function getPercentSeats(valueList: number[], precision: number): number[];
  61. /**
  62. * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004
  63. * See <http://0.30000000000000004.com/>
  64. */
  65. export declare function addSafe(val0: number, val1: number): number;
  66. export declare const MAX_SAFE_INTEGER = 9007199254740991;
  67. /**
  68. * To 0 - 2 * PI, considering negative radian.
  69. */
  70. export declare function remRadian(radian: number): number;
  71. /**
  72. * @param {type} radian
  73. * @return {boolean}
  74. */
  75. export declare function isRadianAroundZero(val: number): boolean;
  76. /**
  77. * @param value valid type: number | string | Date, otherwise return `new Date(NaN)`
  78. * These values can be accepted:
  79. * + An instance of Date, represent a time in its own time zone.
  80. * + Or string in a subset of ISO 8601, only including:
  81. * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',
  82. * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',
  83. * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',
  84. * all of which will be treated as local time if time zone is not specified
  85. * (see <https://momentjs.com/>).
  86. * + Or other string format, including (all of which will be treated as loacal time):
  87. * '2012', '2012-3-1', '2012/3/1', '2012/03/01',
  88. * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'
  89. * + a timestamp, which represent a time in UTC.
  90. * @return date Never be null/undefined. If invalid, return `new Date(NaN)`.
  91. */
  92. export declare function parseDate(value: unknown): Date;
  93. /**
  94. * Quantity of a number. e.g. 0.1, 1, 10, 100
  95. *
  96. * @param val
  97. * @return
  98. */
  99. export declare function quantity(val: number): number;
  100. /**
  101. * Exponent of the quantity of a number
  102. * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3
  103. *
  104. * @param val non-negative value
  105. * @return
  106. */
  107. export declare function quantityExponent(val: number): number;
  108. /**
  109. * find a “nice” number approximately equal to x. Round the number if round = true,
  110. * take ceiling if round = false. The primary observation is that the “nicest”
  111. * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.
  112. *
  113. * See "Nice Numbers for Graph Labels" of Graphic Gems.
  114. *
  115. * @param val Non-negative value.
  116. * @param round
  117. * @return Niced number
  118. */
  119. export declare function nice(val: number, round?: boolean): number;
  120. /**
  121. * This code was copied from "d3.js"
  122. * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.
  123. * See the license statement at the head of this file.
  124. * @param ascArr
  125. */
  126. export declare function quantile(ascArr: number[], p: number): number;
  127. declare type IntervalItem = {
  128. interval: [number, number];
  129. close: [0 | 1, 0 | 1];
  130. };
  131. /**
  132. * Order intervals asc, and split them when overlap.
  133. * expect(numberUtil.reformIntervals([
  134. * {interval: [18, 62], close: [1, 1]},
  135. * {interval: [-Infinity, -70], close: [0, 0]},
  136. * {interval: [-70, -26], close: [1, 1]},
  137. * {interval: [-26, 18], close: [1, 1]},
  138. * {interval: [62, 150], close: [1, 1]},
  139. * {interval: [106, 150], close: [1, 1]},
  140. * {interval: [150, Infinity], close: [0, 0]}
  141. * ])).toEqual([
  142. * {interval: [-Infinity, -70], close: [0, 0]},
  143. * {interval: [-70, -26], close: [1, 1]},
  144. * {interval: [-26, 18], close: [0, 1]},
  145. * {interval: [18, 62], close: [0, 1]},
  146. * {interval: [62, 150], close: [0, 1]},
  147. * {interval: [150, Infinity], close: [0, 0]}
  148. * ]);
  149. * @param list, where `close` mean open or close
  150. * of the interval, and Infinity can be used.
  151. * @return The origin list, which has been reformed.
  152. */
  153. export declare function reformIntervals(list: IntervalItem[]): IntervalItem[];
  154. /**
  155. * [Numberic is defined as]:
  156. * `parseFloat(val) == val`
  157. * For example:
  158. * numeric:
  159. * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity,
  160. * and they rounded by white-spaces or line-terminal like ' -123 \n ' (see es spec)
  161. * not-numeric:
  162. * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab',
  163. * empty string, string with only white-spaces or line-terminal (see es spec),
  164. * 0x12, '0x12', '-0x12', 012, '012', '-012',
  165. * non-string, ...
  166. *
  167. * @test See full test cases in `test/ut/spec/util/number.js`.
  168. * @return Must be a typeof number. If not numeric, return NaN.
  169. */
  170. export declare function numericToNumber(val: unknown): number;
  171. /**
  172. * Definition of "numeric": see `numericToNumber`.
  173. */
  174. export declare function isNumeric(val: unknown): val is number;
  175. /**
  176. * Use random base to prevent users hard code depending on
  177. * this auto generated marker id.
  178. * @return An positive integer.
  179. */
  180. export declare function getRandomIdBase(): number;
  181. /**
  182. * Get the greatest common dividor
  183. *
  184. * @param {number} a one number
  185. * @param {number} b the other number
  186. */
  187. export declare function getGreatestCommonDividor(a: number, b: number): number;
  188. /**
  189. * Get the least common multiple
  190. *
  191. * @param {number} a one number
  192. * @param {number} b the other number
  193. */
  194. export declare function getLeastCommonMultiple(a: number, b: number): number;
  195. export {};