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.

    Args:
        value (int, float, string): Input number.
        precision (int): Number of decimal for first part of the number.

    Returns:
        str: number in scientific notation z.wq x 10ⁿ.
    """
    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)
        fmt = '{:.%se}' % str(int(precision))
        n = fmt.format(value)
    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
