TS 自定义结构Long与number类型相互转换

简介: TS 自定义结构Long与number类型相互转换


TS 自定义结构Long 如下:

export interface Long {
/** Low bits */
low: number;
/** High bits */
high: number;
/** Whether unsigned or not */
unsigned: boolean;
} 


根据给定的 Long 接口定义,我们可以实现 Long 类型number 类型之间的相互转换函数


首先,我们可以编写一个将 Long 转换为 number 的函数:

function longToNumber(longValue: Long): number {
  const { low, high, unsigned } = longValue;
  if (unsigned) {
    return (high >>> 0) * 4294967296 + (low >>> 0);
  } else {
    return high * 4294967296 + (low >>> 0);
  }
}


上述函数 longToNumber 接受一个 Long 类型的参数 longValue,并根据 unsigned 属性的值,将其转换为相应的 number 类型。如果 unsignedtrue,我们使用无符号右移操作符 >>> 将低位和高位进行组合;如果 unsignedfalse,我们直接将低位和高位进行组合。


接下来,我们可以编写一个将 number 转换为 Long 的函数:

function numberToLong(numberValue: number): Long {
  const low = numberValue >>> 0;
  const high = Math.floor(numberValue / 4294967296);
  return {
    low,
    high,
    unsigned: numberValue < 0 ? true : false,
  };
}


函数 numberToLong 接受一个 number 类型的参数 numberValue,并根据其值计算出低位和高位。我们使用无符号右移操作符 >>> 取得低位,使用 Math.floor 和除法运算计算出高位。根据 numberValue 的正负值,我们设置 unsigned 属性为相应的布尔值。


现在,我们可以使用上述函数进行 Long 类型和 number 类型之间的相互转换。

const longValue: Long = {
  low: 1234567890,
  high: 0,
  unsigned: false,
};
const numberValue = longToNumber(longValue);
console.log(numberValue); // 输出: 1234567890
const newLongValue = numberToLong(numberValue);
console.log(newLongValue); // 输出: { low: 1234567890, high: 0, unsigned: false }


在上述示例中,我们首先定义了一个 Long 类型的值 longValue,然后使用 longToNumber 函数将其转换为 number 类型的值 numberValue。接着,我们使用 numberToLong 函数将 numberValue 转换回 Long 类型,并将结果存储在 newLongValue 中。

最后,我们分别打印了 numberValuenewLongValue 的值,验证了转换的准确性。

相关文章
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
42 0
|
1月前
|
编译器 C语言
c语言中long的作用类型
c语言中long的作用类型
28 0
|
2月前
|
Oracle 关系型数据库 数据库
Flink Sink to Oracle 存在字段CLOB类型,如何处理错误”ORA-01461: 仅能绑定要插入LONG的LONG值“
做Flink CDC同步数据过程中,目标是Oracle数据库,其中某个字段较大被设置为CLOB类型,其中会遇到异常,”ORA-01461: 仅能绑定要插入LONG的LONG值“
|
3月前
|
存储 前端开发 JavaScript
由Long类型引发的生产事故
由Long类型引发的生产事故
|
3月前
|
缓存
Long包装类型的享元模式注意事项
昨天修复订单接口的bug
30 0
|
3月前
|
存储 自然语言处理 安全
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
【C++11保姆级教程】空指针(nullptr),long long类型,char16_t和char32_t类型
|
6月前
|
Java
【面试题精讲】Java超过long类型的数据如何表示
【面试题精讲】Java超过long类型的数据如何表示
|
4月前
|
JSON 前端开发 Java
JAVA后端向前端传递Long类型数据,导致数据不一致
JAVA后端向前端传递Long类型数据,导致数据不一致
94 0
|
4月前
|
数据采集 SQL DataWorks
DataWorks有什么办法将long在search中变成date类型或者是参数里面能配置时间戳吗?
DataWorks有什么办法将long在search中变成date类型或者是参数里面能配置时间戳吗?
44 0
|
6月前
|
JSON 数据格式
Gson转换json数据为HashMap时long类型变为double问题解决
今天再使用Gson处理json数据的时候碰到了一个问题 , 当我使用如下代码解析json数据的时候 , requestTime就变为了double类型
123 0