为什么JavaScript中的`btoa`编码适用于20位数字的字符串而不适用于20位数字的int?

凯文

考虑以下btoa输出

btoa(99999999999999999999)
"MTAwMDAwMDAwMDAwMDAwMDAwMDAw"

btoa(99999999999999999998)
"MTAwMDAwMDAwMDAwMDAwMDAwMDAw"

btoa("99999999999999999998")
"OTk5OTk5OTk5OTk5OTk5OTk5OTg="

btoa("99999999999999999999")
"OTk5OTk5OTk5OTk5OTk5OTk5OTk="

我们看到,btoa它无法对20位数的唯一哈希进行编码,int但能够对20位数进行编码string为什么是这样?

我最初的猜测是,既然btoa是base,64它只能编码小于base的东西64,但是为什么它却可以编码20位数string呢?

此外BTOA似乎无法编码int不到9223372036854775807这是一种2^63

btoa(9223372036854775302)
"OTIyMzM3MjAzNjg1NDc3NjAwMA=="

btoa(9223372036854775303)
"OTIyMzM3MjAzNjg1NDc3NjAwMA=="
TJ人群

由于浮点数不精确。请记住,除了某些计算过程中的临时功能外,JavaScript没有整数所有JavaScript数字都是IEEE-754双精度浮点数。99999999999999999999在IEEE-754数字中不是一个安全的整数值,实际上,如果您这样做:

console.log(99999999999999999999);

...你会看到的

100000000000000000000

最大安全整数(例如,不受浮点不精确度影响的整数)为9007199254740991

由于btoa接受字符串(当您传递数字时,数字只会转换为字符串),因此只需在您的值两边加上引号即可:

btoa("99999999999999999999")
=> OTk5OTk5OTk5OTk5OTk5OTk5OTk=

当然,如果该值是数学计算的结果,则不能这样做。您必须更改计算如此大的数字的方法,因为它们超出了数字类型的精确范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么JavaScript中的`btoa`编码适用于20位数字的字符串而不适用于20位数字的int?

来自分类Dev

为什么我的itoa实施仅适用于3位数字?

来自分类Dev

为什么相同的postgres查询不适用于两位数数字?

来自分类Dev

为什么我的dplyr百分位数计算不适用于整洁的评估?

来自分类Dev

为什么输入模式属性不适用于数字?

来自分类Dev

为什么输入模式属性不适用于数字?

来自分类Dev

百分位数高度不适用于CSS。全屏页面可能吗?

来自分类Dev

自动生成的起始于001的序列号(仅适用于3位数字)-PHP / MYSQL

来自分类Dev

在以“ 20”开头的4位数字的字符串中的位置

来自分类Dev

排序列表视图不适用于 2 位数字 c#

来自分类Dev

javascript样式不适用于分割的字符串

来自分类Dev

javascript排序不适用于字符串

来自分类Dev

substringWithRange适用于硬编码字符串,但不适用于用户输入的字符串

来自分类Dev

substringWithRange适用于硬编码字符串,但不适用于用户输入的字符串

来自分类Dev

C#-Lucene搜索不适用于少数字符串文字

来自分类Dev

Grep不适用于带数字和空格的字符串

来自分类Dev

Python子字符串不适用于数字整数

来自分类Dev

C中的HashTable不适用于字符串

来自分类Dev

C将20位数字的字符串转换为数字以进行IBAN验证

来自分类Dev

使用isEqualToString进行比较不适用于iPhone中的Url编码的字符串

来自分类Dev

isspace()仅适用于最多8位的数字吗?

来自分类Dev

为什么字符串concat宏不适用于这种“ +”情况?

来自分类Dev

内置函数不适用于求值字符串,为什么?

来自分类Dev

为什么std :: uppercase不适用于字符串?

来自分类Dev

为什么 C# 编组字符串不适用于 C++ DLL

来自分类Dev

按位&不适用于kotlin中的字节

来自分类Dev

Matlab中的字符串转换不适用于int值

来自分类Dev

全文搜索不适用于数字

来自分类Dev

Excel countif不适用于数字

Related 相关文章

  1. 1

    为什么JavaScript中的`btoa`编码适用于20位数字的字符串而不适用于20位数字的int?

  2. 2

    为什么我的itoa实施仅适用于3位数字?

  3. 3

    为什么相同的postgres查询不适用于两位数数字?

  4. 4

    为什么我的dplyr百分位数计算不适用于整洁的评估?

  5. 5

    为什么输入模式属性不适用于数字?

  6. 6

    为什么输入模式属性不适用于数字?

  7. 7

    百分位数高度不适用于CSS。全屏页面可能吗?

  8. 8

    自动生成的起始于001的序列号(仅适用于3位数字)-PHP / MYSQL

  9. 9

    在以“ 20”开头的4位数字的字符串中的位置

  10. 10

    排序列表视图不适用于 2 位数字 c#

  11. 11

    javascript样式不适用于分割的字符串

  12. 12

    javascript排序不适用于字符串

  13. 13

    substringWithRange适用于硬编码字符串,但不适用于用户输入的字符串

  14. 14

    substringWithRange适用于硬编码字符串,但不适用于用户输入的字符串

  15. 15

    C#-Lucene搜索不适用于少数字符串文字

  16. 16

    Grep不适用于带数字和空格的字符串

  17. 17

    Python子字符串不适用于数字整数

  18. 18

    C中的HashTable不适用于字符串

  19. 19

    C将20位数字的字符串转换为数字以进行IBAN验证

  20. 20

    使用isEqualToString进行比较不适用于iPhone中的Url编码的字符串

  21. 21

    isspace()仅适用于最多8位的数字吗?

  22. 22

    为什么字符串concat宏不适用于这种“ +”情况?

  23. 23

    内置函数不适用于求值字符串,为什么?

  24. 24

    为什么std :: uppercase不适用于字符串?

  25. 25

    为什么 C# 编组字符串不适用于 C++ DLL

  26. 26

    按位&不适用于kotlin中的字节

  27. 27

    Matlab中的字符串转换不适用于int值

  28. 28

    全文搜索不适用于数字

  29. 29

    Excel countif不适用于数字

热门标签

归档