def flops_to_string(flops, units="GFLOPs", precision=2):
    """Convert FLOPs number into a string.
    Note that Here we take a multiply-add counts as one FLOP.
    Args:
        flops (float): FLOPs number to be converted.
        units (str | None): Converted FLOPs units. Options are None, 'GFLOPs',
            'MFLOPs', 'KFLOPs', 'FLOPs'. If set to None, it will automatically
            choose the most suitable unit for FLOPs. Default: 'GFLOPs'.
        precision (int): Digit number after the decimal point. Default: 2.
    Returns:
        str: The converted FLOPs number with units.
    Examples:
        >>> flops_to_string(1e9)
        '1.0 GFLOPs'
        >>> flops_to_string(2e5, 'MFLOPs')
        '0.2 MFLOPs'
        >>> flops_to_string(3e-9, None)
        '3e-09 FLOPs'
    """
    if units is None:
        if flops // 10 ** 9 > 0:
            return str(round(flops / 10.0 ** 9, precision)) + " GFLOPs"
        elif flops // 10 ** 6 > 0:
            return str(round(flops / 10.0 ** 6, precision)) + " MFLOPs"
        elif flops // 10 ** 3 > 0:
            return str(round(flops / 10.0 ** 3, precision)) + " KFLOPs"
        else:
            return str(flops) + " FLOPs"
    else:
        if units == "GFLOPs":
            return str(round(flops / 10.0 ** 9, precision)) + " " + units
        elif units == "MFLOPs":
            return str(round(flops / 10.0 ** 6, precision)) + " " + units
        elif units == "KFLOPs":
            return str(round(flops / 10.0 ** 3, precision)) + " " + units
        else:
            return str(flops) + " FLOPs"