You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JS中将两个f64打包为i64通过TradingView API传输并还原?

JS实现多数值打包到TradingView K线字段的方案

打包流程(f64 → f32 → i32 → i64)

利用JS的TypedArray直接操作二进制内存,完成类型转换与打包:

// 打包两个64位浮点数为一个64位整数(BigInt)
function packTwoF64ToI64(num1, num2) {
  // 1. f64转f32:通过Float32Array自动截断精度
  const f32Buffer = new Float32Array([num1, num2]);
  // 2. f32转i32:解析f32的二进制位为32位整数
  const i32Buffer = new Int32Array(f32Buffer.buffer);
  const i32High = i32Buffer[0];
  const i32Low = i32Buffer[1];
  // 3. 打包为i64 BigInt:处理符号位后拼接高低32位
  const highBigInt = BigInt(i32High) & 0xFFFFFFFFn;
  const lowBigInt = BigInt(i32Low) & 0xFFFFFFFFn;
  return (highBigInt << 32n) | lowBigInt;
}

解包流程(i64 → i32 → f32 → f64)

逆向操作还原原始数值:

// 从64位整数(BigInt)解包出两个64位浮点数
function unpackI64ToTwoF64(packedBigInt) {
  // 1. 拆分i64为两个i32
  const highI32 = Number((packedBigInt >> 32n) & 0xFFFFFFFFn);
  const lowI32 = Number(packedBigInt & 0xFFFFFFFFn);
  // 2. i32转f32:解析整数的二进制位为32位浮点数
  const i32Buffer = new Int32Array([highI32, lowI32]);
  const f32Buffer = new Float32Array(i32Buffer.buffer);
  // 3. f32转f64:直接返回JS原生Number(即f64)
  return [f32Buffer[0], f32Buffer[1]];
}

测试示例

// 模拟交易场景数值
const price1 = 150.75;
const volume1 = 2450.3;
const price2 = 151.2;
const volume2 = 1890.5;

// 打包两组数值
const packed1 = packTwoF64ToI64(price1, volume1);
const packed2 = packTwoF64ToI64(price2, volume2);

// 构造TradingView K线数组(时间+5个打包值,此处仅展示2个)
const kline = [1699996800000, packed1, packed2, /* 剩余3组打包数值 */];

// 回调中解包还原
const [unpackedPrice1, unpackedVolume1] = unpackI64ToTwoF64(kline[1]);
const [unpackedPrice2, unpackedVolume2] = unpackI64ToTwoF64(kline[2]);

console.log('原始价格1:', price1, '解包后:', unpackedPrice1);
console.log('原始成交量1:', volume1, '解包后:', unpackedVolume1);

注意事项

  • BigInt兼容性:若TradingView API不支持BigInt作为字段值,需确认打包后的i64是否在JS Number的安全范围(2^53 - 1)内。交易场景下的价格、成交量转f32后,打包结果通常不会超出该范围;极端值可考虑拆分i64为两个32位Number(但会占用额外字段)。
  • 精度损失:f64转f32必然损失精度,此为符合需求的前提,损失程度取决于原始数值的小数位数与范围。
  • 字节序问题:TypedArray使用平台原生字节序,因打包和解包在同一环境执行,无需额外处理。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:00:36