问题一:
用 API 从 JSON 获取了 18 位的数字,在平台中直接输出到文本字段或使用代码块转为文本,都会显示为科学计数法格式。
如果使用 fx 函数强制转换为字符串,则只能显示前 17 位,最后一位为 0。
请问还有没有其他的办法,能实现对 18 位以上大数字的精确处理?
问题二:
对于该问题,我想到了可以用 PYTHON 代码块将 JSON 对应参数两侧加上双引号,直接改成字符串。
但是,似乎这个平台的 API 功能(WEBHOOK、封装流程)也没有办法直接接收文本,只能对 JSON 进行解析。
假设我接受的 JSON 就是 18 位数字没法改的情况,是不是就没办法了?
不是这个意思
// 接收输入(可能是字符串或对象)
const jsonInput = input.json;
let jsonData;
try {
// 如果是字符串,解析为对象;否则直接使用
jsonData = typeof jsonInput === 'string' ? JSON.parse(jsonInput) : jsonInput;
} catch (e) {
// 如果解析失败,返回错误信息
output = "无效的 JSON 数据";
return;
}
// 提取 id 字段(兼容旧版 Node.js)
const id = (jsonData && jsonData.ts) ? jsonData.id: null;
// 输出纯文本结果
output = {id:id.toString()}
这如果在接口获取的数据就开始丢失的话,如果能返回文本就好了,或者尝试用代码块进行接口请求
不行,流程自带的 API(例如 webhook、发送 API 请求和封装业务流程)接收到就自动变成科学计数法了,精度已经被截断了,再怎么转都已经没有用了。这个你可以用 POST 的工具试一试。
除非不用流程自带的 API,而是用代码块自己写 API,这样接收到变量里的数字有可能还保留着精度。
“代码块就是 int()转换成数字” 这个得看你从哪里来的数字,如果是 工作表的输入框中输入的,到这里肯定是 已经被“16 位”截断之后的数值了,因为工作表最大支持 16 位。这个问题还得看你的数字从哪里来的,比如 API 过来,或者代码块拉数据库过来。
问题 1 中“用 API 从 JSON 获取了 18 位的数字,在平台中直接输出到文本字段或使用代码块转为文本”,API 接受之后,应该是和发送给你的一样的内容,API 后直接走 代码块输出文本或者数字都是没问题,但还是看你存储在哪里,要是继续存储在工作表也一样被截断。
明道标准的 API 有好多地方不灵活,好多地方我都自己用代码块处理
代码块就是 int()转换成数字,然后 output 不管转不转文本,结果都一样丢失了最后一位数。。
如果用 fx 函数,就是强制转换为 STRING,功能其实是不用科学计数法而已。
事实上以上的转换都没有意义, 因为从接收到这个数开始,就已经丢失精度了。
目前尝试直接用代码块编制 API,直接接收 JSON 的文本,然后通过 PYTHON 的正则表达式等方式替换数字变量为字符串,再转发到另一个应用里面解析 API,存到字段里面。
这样可以解决接收的问题,但只能当文本格式了。
代码块怎么转换的,贴个图一起看下
你这想法很好。但我目前遇到的问题是,从 API 接收就没法接收到完整的数字,也就不存在怎么储存的说法。
再试试吧
好吧,查了帮助整形是有限制的,浮点数可以有 300 多位的长度,但只能用科学计算法表示。
我有一个想法,不知道有没有可能,在处理的过程中,将这个数字拆分成多段,比如 18 位,分成 10 位 +8 位,在存储的时候用字符串来表达,转换的时候变成数字进行计算。
流程里面的 API,接口返回是 18 位数字,代码块转了也一样最后一位是 0。例如 123456789012345678 转换完了是 123456789012345680。
还有这回事,什么 API,是集成中心的 API 吗,会不会接口返回的就是科学计数法,用代码块直接将科学计数法的值转换成数值可行吗