Skip to content

Commit 003290b

Browse files
committed
Add short numeric format in engineering notation
1 parent 44cb338 commit 003290b

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

src/App.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,22 @@ function App() {
7272
{/*display current points value*/}
7373
<p>
7474
Points:{" "}
75-
<div id="points-display">
75+
<span id="points-display">
7676
<NumericDisplay value={points} />
77-
</div>
77+
</span>
7878
</p>
7979
{/*increase points from clicking a button*/}
8080
<button onClick={() => addPointsFromClick()}>Click to Add Points</button>
8181
<br />
82+
Clicker Level: {clickers}
83+
<br />
8284
{/*upgrade clicker (points per click)*/}
8385
<button onClick={() => upgradeClicker()}>
8486
Upgrade Clicker (Points Per Click)
8587
</button>
8688
<CostDisplay cost={10 * Math.pow(2, clickers - 1)} />
89+
Autoclicker Level: {autoClickers}
90+
<br />
8791
{/*upgrade points per second*/}
8892
<button onClick={() => upgradePointsPerSecond()}>
8993
Upgrade Points Per Second

src/components/NumericDisplay/NumericDisplay.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,29 @@ import React from 'react';
22
import PropTypes from 'prop-types';
33
import styles from './NumericDisplay.module.css';
44

5+
function formatNumber(number) {
6+
//format number to short form with numeric prefixes
7+
const exponent = Math.floor(Math.log10(number));
8+
const exponent3 = Math.floor(exponent / 3) * 3;
9+
const prefixes = ['', 'K', 'M', 'B', 'T'];
10+
if (number < 1000) {
11+
return number.toString();
12+
} else {
13+
const roundedNumber = number.toPrecision(3);
14+
return (
15+
(parseFloat(roundedNumber) / Math.pow(10, exponent3)).toPrecision(3) +
16+
prefixes[exponent3 / 3]
17+
);
18+
}
19+
}
520
const NumericDisplay = (
621
{ value }, //display numeric values
722
) => (
8-
<div className={styles.NumericDisplay} data-testid="NumericDisplay">
23+
<span className={styles.NumericDisplay} data-testid="NumericDisplay">
924
{/*display numeric values with specified styles*/}
10-
{value}
11-
{/*bold the numeric value*/}
12-
</div>
25+
{formatNumber(value)}
26+
{/*bold the numeric value with short exponential form (engineering notation)*/}
27+
</span>
1328
);
1429

1530
NumericDisplay.propTypes = { value: PropTypes.number.isRequired };

0 commit comments

Comments
 (0)