python - 在 Python 中将 float 转换为两位数的十六进制数

标签 python hex

与这里所有类似措辞的问题不同,我并不是想获取 float 的实际十六进制值。基本上我正在尝试制作渐变颜色,我需要一个如下所示的函数:

def float_to_color(weight):
    color = '#0000'
    hex = ????? #do something with weight here
    color += hex
    return color

我能想到的唯一方法是将weight浮点除以256,然后采用不同的情况,为每个256个“凹口”返回不同的字符串。必须有一个更简单的方法!

这是我需要做的事情,但我希望每个可能的值 00 到 FF 都与 256 个权重值成比例表示,而不是 10 种不同的情况。我无法使用 RGB 元组类型的颜色,因为我需要它的特定模块无法识别它。重量是从测量中获取的任意 0.0-1.0 浮点值。颜色应该代表它。

def weight_to_color(weight):
    color_base = '#0000'
    if weight > 0.9: return str(color_base+'FF')
    elif weight > 0.8: return str(color_base+'DD')
    elif weight > 0.7: return str(color_base+'EE')
    elif weight > 0.6: return str(color_base+'BB')
    elif weight > 0.5: return str(color_base+'99')
    elif weight > 0.4: return str(color_base+'77')
    elif weight > 0.3: return str(color_base+'55')
    elif weight > 0.2: return str(color_base+'33')
    elif weight > 0.1: return str(color_base+'11')
    else: return str(color_base+'00')

最佳答案

你可以使用这样的东西

def int2hex(x):
    val = hex(x)[2:] # returns something like '0x15', so we remove the '0x'
    val = "0"+val if len(val)<2 else val # make sure 2 digits
    return val

然后在您的函数中,您可以获得十六进制值,例如

return color_base+int2hex(int(255*weight))

其中color_base ="#0000"

查看int2hex函数,我们看到

int2hex(int(255*0)) == "00"
int2hex(int(255*0.5)) == "7F"
int2hex(int(255*1.0)) == "FF"

这假设您的体重从 0 到 1。如果它的范围不同,您可以使用 int2hex(int(255*weight/max_weight)) 其中 max_weight 是允许的最大值。

此外,您不应该将变量命名为 hex,因为它会隐藏内置函数 hex。如果您绝对不需要在与变量相同的范围内使用该函数(在您的情况下,您不需要),这可能没问题,但这是一个不好的习惯。

关于python - 在 Python 中将 float 转换为两位数的十六进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35399625/

相关文章:

C — 十六进制字符串到文字十六进制值

python - 如何在 Seaborn FacetGrid 中对数刻度后设置刻度?

python - 将 python 程序的屏幕输出打印到文件中,而不将它们写入 python 程序中的文件

python - web2py - 使用两个字段值的组合测试行

使用 0x 表示法的 MySql 十六进制

c# - 将 64 位二进制转换为 Long 等价物

binary - 理解编码的 hbase 值

python - 从 Ignition 中的串行读取十六进制或十进制

python - 在 python <= 2.7 中编写 unicode 程序

python - 在 'IDA PRO' 中,让 'IDAPython' 在启动时导入默认模块