Search code examples
javascriptroundingbbc-microbit

How do I round to 1 decimal on the bbc:microbit with javascript w/o toFixed(), the usual multiplication + divide gives trailing 9999 digits?


temperatureReading = Math.round(temperatureReading * 10) / 10

gives me 26.29999999999999999999 instead of 26.3

And 26.00000000001 instead of 26.0

I get alternating 2 values from the temperature sensor: 26.33 and 26.3200000

After the conversion I have: 26.2999999999999

The number of the repeating digits above is just an example. My display on the micro bit is not wide enough to see them all.

I use toString() to display the values.

Unfortunately, toFixed() and toPrecision() is not available on the micro:bit

Can the rounding be achieved by some other operations?


Solution

  • With the following code I can now get numbers with 1 decimal as a string:

    let temperatureStr = Math.round(temperatureReading * 10).toString()
    let temperature = temperatureStr.slice(0, temperatureStr.length - 1) + "." + temperatureStr.slice(temperatureStr.length - 1);
    

    I first multiply the number by 10 and convert the result to a string. Then, I insert the decimal point before the last digit. This gives me the string I want to print.