Why is a *.0 float shown like an interger?

Hi Streamlit, I’m working on a project that the type of numbers, integer of float, matters. Following is just a sample code:

xx = {"a":1, "b":2.0, "c":3.4}      # note "b" is a float
st.write(xx)

It shows like:

{
"a":1
"b":2
"c":3.4
}

I wish b could be shown as 2.0, not 2 like an integer as a, including the color of text.

Is there any particular purpose for this change of type?

It looks like this is an unfortunate JavaScript issue:

image

Could you just display them as strings and keep the numerical computation separate?

thanks @randyzwitch and @Chad_Mitchell.

regarding to showing them as string, I can definitely do that as the last bullet, but that means I cannot use st.write() since it will put a quote mark around strings, not to mention the code to identify those float variables in a big data structure and do the conversions.

My current solution is to convince my clients that 2 looks more beautiful than 2.0, and they are very kind to postpone it till future upgrade. :slight_smile:

@cuteufo - maybe you can use the new components feature?

Haven’t tried the following code, but something like:

import streamlit as st
import streamlit.components.v1 as components

components.html("""
    <script>
        var x = 5.0364342423;
        x.toFixed(2);
    </script>
""" )

Unfortunately, I think the answer for your client is that this is a display issue rather than an accuracy issue. Meaning, there’s a story to be told that calculations will be done accurately on the Python side, but in the transfer to JSON/HTML loses some of the display precision.

@Chad_Mitchell brings up a point about specifying the values directly if you knew their types and precisions, but I’m not sure that’s a very scalable solution.