与这里所有类似措辞的问题不同,我并不是想获取 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/