【问题标题】:Convert arbitary string to number between 0 and 1 in Javascript在Javascript中将任意字符串转换为0到1之间的数字
【发布时间】:2012-06-28 16:39:56
【问题描述】:

我正在处理 ID 为 8DnKOc6FISU、rNsrl86inpo、5qcmCUsw4EQ 的 Youtube 视频(即 A-Za-z0-9_- 集中的 11 个字符)

目标是将每个 id 转换为颜色(由范围 0-1 表示),以便可以可靠地绘制图表。

根据this question,这些是 64 位数字。鉴于:

  • 我想充分利用任何给定视频集的色彩空间
  • 反正颜色感知不是那么准确

...以 id 的最后 2-3 个字符为基础似乎是明智的。

我的主要方法是我从here 借来的一个函数,它将每个字符转换为二进制数,如下所示:

    function toBin(str){
     var st,i,j,d;
     var arr = [];
     var len = str.length;
     for (i = 1; i<=len; i++){
      d = str.charCodeAt(len-i);
      for (j = 0; j < 8; j++) {
       st = d%2 == '0' ? "class='zero'" : "" 
       arr.push(d%2);
       d = Math.floor(d/2);
      }
     }
    }

但这留下了如何将其转换回浮点数的问题。

对于优雅的解决方案有什么想法吗?

非常感谢您的帮助!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    知道系统是基数 64 (26+26+10+2),只需读取每个符号,将其添加到总和中,然后在每次迭代中将结果乘以 64。最后你会得到一个整数。将其除以最大值以将其归一化为 0-1 范围。

    但是,当您的 ID 接近 253 时,您将开始失去精度,因为这是 JS 可以精确地以整数表示的最大值。

    或者,您可以从一开始就计算浮点数,方法是为行中的每个位置添加 (letter_index / 64letter_position),但在处理过程中会损失更多精度。

    【讨论】:

    • 无论如何,计算机显示器只能使用 2^24 种不同的颜色,因此有限的精度并不是真正的问题。想知道您是否需要使用浮点数来处理颜色,您可以只在模 2^24 中进行数学运算,而不必担心整数溢出。
    • 谢谢奥列格。感谢您的帮助。
    猜你喜欢
    • 2016-04-05
    • 2010-09-24
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多