将7个字符的整数转换为0到100之间的数字

时间:2017-10-15 11:21:30

标签: javascript node.js math

我目前正在尝试实现一个将64位字符的随机十六进制哈希值转换为0到100之间的数字的函数。到目前为止,我有以下代码:

#convert first or second to str or int
#MergeDat['Motor'] = MergeDat['Motor'].astype(str)
Motor['Motor'] = Motor['Motor'].astype(str)

MergeDat['Motor'] = MergeDat['Motor'].astype(int)
#Motor['Motor'] = Motor['Motor'].astype(int)


MergeDat=MergeDat.merge(Motor,how="left")

这样做的优雅方法是什么?

修改

我基本上使用这个可证明公平的系统,只是没有现时:https://thebitcoinstrip.com/a-guide-to-provable-fairness-in-online-casinos/ 如果有人有兴趣,请阅读:)

2 个答案:

答案 0 :(得分:1)

模运算的问题在于结果不一致。有些票号会比其他票号更频繁地被选中。

如果需要统一的结果,最好的方法可能是使用哈希作为种子来提供自己的PRNG,例如Mersenne Twister

使用上述链接中提供的代码,可以通过以下方式获得最佳结果:

Math.floor(MersenneTwister.genrand_res53() * 101)

其中genrand_res53()[0,1)中给出了一个53位分辨率的浮点数。

答案 1 :(得分:0)

答案

function getResolvedTicket(hash) {
  let resolvedDecimal = parseInt(hash.substr(1, 5), 16);
  let ticket = resolvedDecimal%(100000)/1000;
  return ticket;
}

将哈希的前5个字符转换为十进制,然后除以100000,然后将模数除以1000.现在总是得到一个包含3位小数的票证。

一旦我绕过它,

实际上很容易解决:)