def scientific(value, precision=2):
    """
    Return number in string scientific notation z.wq x 10ⁿ
    Examples:
        float(0.3) will return '3.00 x 10⁻¹'
        int(500) will return '5.00 x 10²'
    This will always return a string.

    :param precision int : Number of decimal for first par number
    """
    exponents = {
        "0": "⁰",
        "1": "¹",
        "2": "²",
        "3": "³",
        "4": "⁴",
        "5": "⁵",
        "6": "⁶",
        "7": "⁷",
        "8": "⁸",
        "9": "⁹",
        "+": "⁺",
        "-": "⁻",
    }
    negative = False
    try:
        if "-" in str(value):
            value = str(value).replace("-", "")
            negative = True
        if isinstance(value, str):
            value = float(value)
        n = '{:.{precision}e}'.format(value, precision=int(precision))
    except (ValueError, TypeError):
        return value
    part1, part2 = n.split("e")
    if "-0" in part2:
        part2 = part2.replace("-0", "-")
    if "+0" in part2:
        part2 = part2.replace("+0", "")
    new_part2 = []
    if negative:
        new_part2.append(exponents["-"])
    for char in part2:
        new_part2.append(exponents[char])
    final_str = part1 + " x 10" + "".join(new_part2)
    return final_str