• Jorry有桥(笨小孩)
    2019-05-30
    臧萌老师,能讲一下float和double的精度问题吗,还有它们的比较与计算?

    作者回复: 浮点数的精度涉及到浮点数本身的表示形式,理解起来还是略复杂的。简化版大概可以这么理解,在浮点数的世界里,一个具体的二进制的数字,其实表示的是一个范围,比如说下面的三行代码:
            System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000021));
            System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000022));
            System.out.println(Double.toHexString(0.00000000000000000000000000000000000100000000000000032));

    它们的输出是一样的
    0x1.54484932d2e74p-120
    0x1.54484932d2e74p-120
    0x1.54484932d2e74p-120

    这个意思是这三个数字,转换成浮点数的二进制后其实是一样的。这就是浮点数的精度的直观感受——非常相近的数字,二进制的表示形式是一样的。

    就好像电子的轨道一样,不是说电子可以在任意轨道绕着原子核旋转,或者跃迁,光电效应了解一下?电子的轨道只能在固定的满足某个条件的轨道转圈。计算机也一样,不能表示无限精度的数字,只能尽力……
           
    System.out.println(0.00000000000000000000000000000000000100000000000000032 == 0.00000000000000000000000000000000000100000000000000022);
    比较也是一样的,正因为浮点数的这种不精确,导致其进行精确的比较是不可靠的,比如上面这两个不一样的数字,其实转换成二进制其实是一样的。输出的结果是true

    同样的道理,这种不精确可能会积累,放大,所以浮点数的比较运算,比较推荐的是,求两个数字的差,然后让这个差取绝对值,和一个小到对业务没有影响的值比较,如果比这个值还小,就认为两个浮点数是相等的。

    
     3
  • we
    2019-05-21
    老师,StringBuilder 类型是特殊的函数吗?

    作者回复: StringBuilder 是Java标准类库的一个类, 可以用来高效的拼接字符串.

    
     2
  • Jorry有桥(笨小孩)
    2019-06-01
    明白了,不能精确表示,但我们可以认为在精度范围内相等,具体用法由业务决定

    作者回复: 对,你get到了

    
     1
  • 燚,咁啱嘅😉
    2019-05-30
    老师那个您的姓是如何通过编码来实现的呢?怎样去做一个其他编制呢

    作者回复: 编码是国际标准,任意一个字符,都会有一个数字与之对应。可以简单的使用下面几行代码,查看任意一个字对应的数字。

    char ch = '编';
    int num = ch;
    System.out.println(num);


    “怎样去做一个其他编制呢”
    这个。。。就触及到我知识的盲区了。。。新建一个编码集有点难啊。。。现在一统天下的是Unicode,对应的编码用的最多的是UTF-8。 之前仅仅针对中文字符,有GBK编码集,但是现在一般都会使用UTF-8。

    
     1
  • 姜吉宁
    2019-10-13
    又回头认真看了这一集,还是有个疑问,请教一下老师:遇到个需求,大致是拿到微博帖子正文之后,滤掉全部特殊字符,取前最多50个字符,然后生成一个类似于md5的唯一键,按我个人理解,除了常见的标点符号,空格,汉字和数字之外的其他全部字符都应该被滤掉,大概这个正则应该是什么样的呢

    作者回复:
    理论知识是,每个字符(无论是特殊字符,标点符号,可见的不可见的)都会被映射为一个数字。很自然的,相同类型的字符都被映射为连续的数字。比如说和我们的汉语字符,在Unicode中都是映射为连续的数字,那么知道这个连续数字的开始和结束,就可以根据字符的对应的数字是否在这个范围内进行过滤了。

    我用搜索引擎搜索“java 过滤非汉字字符”,基本上每一篇文章都给出了解决方案。 你提到了正则表达式,我这里给出一个正则表达式的搜索结果仅供参考:
    https://blog.csdn.net/tianyinlove/article/details/46971427

    
    
  • Geek_58b038
    2019-06-01
    老师,为什么\T(TAB)这个键有时候是站3个空格,有时候是1,2个呢 比如说A BB CCC D这样的。。为什么占的位置不固定?

    作者回复: 这就是制表符的意义。tab就是table,表格。可以帮助对齐字符。这个和编程语言没有关系,文本编辑器也是一样的。你可以打开一个文本编辑器试试看。键盘上tab就是这个字符。在左边shift的上边。

     1
    
我们在线,来聊聊吧