跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Java 小数转 36 进制
未分類
9 1 月 2021

Java 小数转 36 进制

Java 小数转 36 进制

資深大佬 : douleL 4

java 小数如 Math.random()转 36 进制,求个方法

大佬有話說 (15)

  • 資深大佬 : crclz

    整数部分就是模 K 取余( K 是进制)。
    小数部分不一定能够精确转换。
    小数部分首先确定你想要的小数位数 n,然后小数部分 tmp=小数部分*(K^n),n 为精度。然后截断 tmp=(int)tmp 。然后把 tmp 转换为 K 进制数,最后移动 n 位小数点。

    以上是我凭借有限的知识想出来的,具体的专门的进制转换要具体去查专门的帖子或者解决方案。

  • 主 資深大佬 : douleL

    我是想用 java 代码模拟 js 的 :Math.random().toString(36)

  • 資深大佬 : AoEiuV020

    @douleL 建议装个 js 引擎直接跑 js 代码,

  • 主 資深大佬 : douleL

    @AoEiuV020 我是这么干了 但是测试了下 性能耗时有点高 所以才想 java 代码替代的

  • 資深大佬 : ysc3839

    去找一些嵌入式的很简单的 js 引擎,看 toString 的实现吧。

  • 資深大佬 : Xusually

    Math.random()出来的小数,拆分成整数部分和小数部分分别用
    Integer.toString(i, 36)
    输出

  • 資深大佬 : Xusually

    @Xusually emmm….小数部分有点问题,得想想,唉。

  • 資深大佬 : AoEiuV020

    @douleL 简单写了一段试了下了 js 能对应上,但是精度是个大问题,无法模拟 js 的精度丢失,感觉 java 的 double 精度比 js 小,bigDecimal 精度又太大,
    @Test
    public void testRadix() {
    assertEquals(“0.o72tt3lcjtq”, toString(“0.6721285152844136”, 36));
    }
    public String toString(String number, int radix) {
    BigDecimal N = new BigDecimal(number);

    StringBuilder sb = new StringBuilder();
    BigInteger i = N.toBigInteger();
    sb.append(i.toString(radix));
    sb.append(‘.’);
    while(new BigDecimal(N.intValue()).compareTo(N) != 0 && sb.length() < 13) {
    N = N.multiply(new BigDecimal(radix));
    i = N.toBigInteger().mod(new BigDecimal(radix).toBigInteger());
    sb.append(i.toString(radix));
    }
    return sb.toString();
    }

  • 資深大佬 : AoEiuV020

    v2ex 怎么发代码来着,
    “`java
    @Test
    public void testRadix() {
    assertEquals(“0.o72tt3lcjtq”, toString(“0.6721285152844136”, 36));
    }
    public String toString(String number, int radix) {
    BigDecimal N = new BigDecimal(number);

    StringBuilder sb = new StringBuilder();
    BigInteger i = N.toBigInteger();
    sb.append(i.toString(radix));
    sb.append(‘.’);
    while(new BigDecimal(N.intValue()).compareTo(N) != 0 && sb.length() < 13) {
    N = N.multiply(new BigDecimal(radix));
    i = N.toBigInteger().mod(new BigDecimal(radix).toBigInteger());
    sb.append(i.toString(radix));
    }
    return sb.toString();
    }
    “`

  • 資深大佬 : AoEiuV020

    “`
    @Test
    public void testRadix() {
    assertEquals(“0.o72tt3lcjtq”, toString(“0.6721285152844136”, 36));
    }
    public String toString(String number, int radix) {
    BigDecimal N = new BigDecimal(number);

    StringBuilder sb = new StringBuilder();
    BigInteger i = N.toBigInteger();
    sb.append(i.toString(radix));
    sb.append(‘.’);
    while(new BigDecimal(N.intValue()).compareTo(N) != 0 && sb.length() < 13) {
    N = N.multiply(new BigDecimal(radix));
    i = N.toBigInteger().mod(new BigDecimal(radix).toBigInteger());
    sb.append(i.toString(radix));
    }
    return sb.toString();
    }
    “`

  • 資深大佬 : AoEiuV020

    https://gist.github.com/AoEiuV020/be724846107b6522164e3dee9478428a

  • 資深大佬 : zxCoder

    转进制不是整数部分除进制取整,小数部分乘进制取整就好了

  • 資深大佬 : momocraft

    直接生成随机字符串不好吗,js 的 toString 连定长都不是

  • 主 資深大佬 : douleL

    @AoEiuV020 感谢老铁的援助 我目前也是找到类似的,和你的方法一样, 精度最后一位和 js 的不一样 暂时用的直接调用 js 引擎 还没找到解决方案

  • 資深大佬 : AoEiuV020

    @momocraft 目的是仿 js,不是随机值,估计是做爬虫之类的东西吧,

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具