相关疑难解决方法(0)

大量错误地在JavaScript中舍入

看到这段代码:

<html>
  <head> 
    <script src="http://www.json.org/json2.js" type="text/javascript"></script>
    <script type="text/javascript">

      var jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
      var jsonParsed = JSON.parse(jsonString);
      console.log(jsonString, jsonParsed);

    </script>
  </head>
  <body>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

当我在Firefox 3.5中看到我的控制台时,jsonParsed的值是:

Object id=714341252076979100 type=FUZZY
Run Code Online (Sandbox Code Playgroud)

即数字四舍五入.尝试了不同的值,相同的结果(数字舍入).

我也没有得到它的舍入规则.714341252076979136舍入为714341252076979200,而714341252076979135舍入为714341252076979100.

编辑:请参阅下面的第一条评论.显然这不是关于JSON,而是关于JavaScript数字处理的东西.但问题仍然存在:

为什么会这样?

javascript floating-point floating-accuracy ieee-754

55
推荐指数
4
解决办法
3万
查看次数

如何用一个对该表唯一的不同整数替换Django的主键

我有一个Django Web应用程序,它使用默认的自动递增正整数作为主键.此密钥在整个应用程序中使用,并经常插入到URL中.我不想向公众公开这个号码,以便他们可以猜测我的数据库中的用户或其他实体的数量.

这是一个经常要求,我已经向类似的矿山看到了问题和答案.大多数解决方案建议散列原始主键值.但是,这些答案都不符合我的需要.这些是我的要求:

  1. 我想将主键字段类型保持为整数.
  2. 每次读取或写入或与数据库进行比较时,我也不希望不必散列/取消该值.这看起来很浪费这样做一次会很好:当记录最初插入数据库时
  3. 散列/加密功能不需要是可逆的,因为我不需要恢复原始顺序密钥.散列值只需要是唯一的.
  4. 散列值只需对于该表是唯一的 - 不是普遍唯一的.
  5. 散列值应尽可能短.我想避免使用极长(20个以上字符)的网址

实现这一目标的最佳方法是什么?以下工作会怎样?

def hash_function(int):
    return fancy-hash-function # What function should I use??


def obfuscate_pk(sender, instance, created, **kwargs):
    if created:
        logger.info("MyClass #%s, created with created=%s: %s" % (instance.pk, created, instance))
        instance.pk = hash_function(instance.pk)
        instance.save()
        logger.info("\tNew Pk=%s" % instance.pk)

class MyClass(models.Model):
    blahblah = models.CharField(max_length=50, null=False, blank=False,)


post_save.connect(obfuscate_pk, sender=MyClass)
Run Code Online (Sandbox Code Playgroud)

python mysql django hash primary-key

8
推荐指数
2
解决办法
4385
查看次数