0 1 0.1 randRange(1, 9) TENTHS * MARK_INCREMENT localeToFixed(SOLUTION, 1)

Move the orange dot to \pink{SOLN_TXT} on the number line.

init({ range: [[LOWER_BOUND - 0.1, UPPER_BOUND + 0.4], [-1, 1]], scale: [350, 40] }); style({arrows: ">"}); line( [ 0, 0 ], [ UPPER_BOUND + 0.06, 0 ] ); style({arrows: "->"}); line( [ 0, 0 ], [ LOWER_BOUND - 0.06, 0 ] ); style({arrows: ""}); for ( var x = LOWER_BOUND; x <= UPPER_BOUND; x += MARK_INCREMENT ) { line( [ x, -0.2 ], [ x, 0.2 ] ); } style({ stroke: BLUE, strokeWidth: 3.5 }); line( [ LOWER_BOUND, -0.2], [LOWER_BOUND, 0.2]); label( [ LOWER_BOUND, -0.53 ], LOWER_BOUND, "center", { color: BLUE }); line( [ UPPER_BOUND, -0.2], [UPPER_BOUND, 0.2]); label( [ UPPER_BOUND, -0.53 ], UPPER_BOUND, "center", { color: BLUE }); addMouseLayer(); graph.movablePoint = addMovablePoint({ constraints: { constrainY: true }, snapX: 0.025 }); graph.movablePoint.onMove = function( x, y ) { return [ min( max( LOWER_BOUND, x ), UPPER_BOUND ), y ]; };
graph.movablePoint.coord[0]
if ( guess === 0 ) { return ""; } return abs( SOLUTION - guess ) < 0.001;
graph.movablePoint.setCoord( [ guess, 0 ] );

The number line is divided into 10 equal pieces between LOWER_BOUND and UPPER_BOUND.

var MI = MARK_INCREMENT; for (var x = LOWER_BOUND + MI; x < UPPER_BOUND - MI/2; x += MI) { label([LOWER_BOUND + x, -0.53], localeToFixed(x, 1) , "center"); }

Each piece represents a length of commafy(MARK_INCREMENT).

Starting at LOWER_BOUND, we move a length of \blue{commafy(MARK_INCREMENT) \text{ cardinalThrough20(TENTHS) time}} to get to \pink{SOLN_TXT}.

Starting at LOWER_BOUND, we move a length of \blue{commafy(MARK_INCREMENT) \text{ cardinalThrough20(TENTHS) times}} to get to \pink{SOLN_TXT}.

style({ stroke: BLUE, fill: BLUE, strokeWidth: 3.5, arrows: "->" }); line([0, 0], [SOLUTION, 0]); graph.movablePoint.visibleShape.toFront(); label([TENTHS / 10, -0.53], SOLN_TXT, "center", { color: PINK }); graph.movablePoint.moveTo(SOLUTION, 0);

The highlighted number shows where \pink{SOLN_TXT} is on the number line.