|
1 | 1 | <script>
|
2 | 2 | import { tick } from "svelte";
|
| 3 | + import Decimal from "decimal.js"; |
3 | 4 |
|
4 | 5 | let {
|
5 | 6 | ticksArray = $bindable(),
|
|
20 | 21 | $inspect(ticksArray);
|
21 | 22 |
|
22 | 23 | function generateTicks(data, numTicks, baseline, setTick) {
|
23 |
| - console.log(data, typeof data); |
24 |
| - let minVal = baseline !== null ? baseline : Math.min(...data); |
25 |
| - let maxVal = setTick !== null ? setTick : Math.max(...data); |
26 |
| - let rangeVal = maxVal - minVal; |
| 24 | + let minVal = |
| 25 | + baseline !== null |
| 26 | + ? new Decimal(baseline) |
| 27 | + : Decimal.min(...data.map((val) => new Decimal(val))); |
| 28 | + let maxVal = |
| 29 | + setTick !== null |
| 30 | + ? new Decimal(setTick) |
| 31 | + : Decimal.max(...data.map((val) => new Decimal(val))); |
| 32 | + let rangeVal = maxVal.minus(minVal); |
27 | 33 |
|
28 |
| - let roughStep = rangeVal / (numTicks - 1); |
| 34 | + let roughStep = rangeVal.div(numTicks - 1); |
29 | 35 | let normalizedSteps = [1, 2, 5, 10];
|
30 | 36 |
|
31 |
| - let stepPower = Math.pow(10, -Math.floor(Math.log10(roughStep))); |
32 |
| - let normalizedStep = roughStep * stepPower; |
33 |
| - let optimalStep = |
34 |
| - normalizedSteps.find((step) => step >= normalizedStep) / stepPower; |
| 37 | + let stepPower = Decimal.pow( |
| 38 | + 10, |
| 39 | + -Math.floor(Math.log10(roughStep.toNumber())), |
| 40 | + ); |
| 41 | + let normalizedStep = roughStep.mul(stepPower); |
| 42 | + let optimalStep = new Decimal( |
| 43 | + normalizedSteps.find((step) => step >= normalizedStep.toNumber()), |
| 44 | + ).div(stepPower); |
35 | 45 |
|
36 |
| - let scaleMin = Math.floor(minVal / optimalStep) * optimalStep; |
37 |
| - let scaleMax = Math.ceil(maxVal / optimalStep) * optimalStep; |
| 46 | + let scaleMin = minVal.div(optimalStep).floor().mul(optimalStep); |
| 47 | + let scaleMax = maxVal.div(optimalStep).ceil().mul(optimalStep); |
38 | 48 |
|
39 | 49 | let ticks = [];
|
40 |
| - for (let i = scaleMin; i <= scaleMax; i += optimalStep) { |
41 |
| - ticks.push(i); |
| 50 | + for (let i = scaleMin; i.lte(scaleMax); i = i.plus(optimalStep)) { |
| 51 | + ticks.push(i.toNumber()); |
42 | 52 | }
|
43 | 53 | return ticks;
|
44 | 54 | }
|
|
0 commit comments