首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确覆盖mathjs大数的toJSON

正确覆盖mathjs大数的toJSON
EN

Stack Overflow用户
提问于 2022-11-27 19:53:25
回答 2查看 22关注 0票数 0

我试图使用以下方法覆盖mathjs Bignumber:

代码语言:javascript
运行
复制
import * as math from 'mathjs';

export const bgn = (v: number | math.BigNumber) => {
  const z = math.bignumber(v) as math.BigNumber;
  (z as any).toJSON = () => {
    return Number(math.larger(100, z) ? math.round(z,2) : math.round(z,4)).toFixed(4);
  }
  return z;
}

但出于某种原因,它仍然把它压缩到:

代码语言:javascript
运行
复制
{"mathjs":"BigNumber","value":"42500"}

我的目标是把它串成一个数字:

代码语言:javascript
运行
复制
42500
EN

回答 2

Stack Overflow用户

发布于 2022-11-27 20:30:07

这在本机JSON.stringify实现中目前是不可能的。随着 proposal的采用,它将成为可能,它还包括一个用于非有损序列化的助手。

你会用它作为

代码语言:javascript
运行
复制
const text = JSON.stringify(value, (key, val) => {
  if (val instanceof math.bignumber) return JSON.rawJSON(val.toString())
  else return val;
});
console.log(text);
票数 1
EN

Stack Overflow用户

发布于 2022-11-27 20:28:56

OP在正确的轨道上,这应该很好:

代码语言:javascript
运行
复制
const math = require('mathjs');

const bgn = (v) => {
    const z = math.bignumber(v); // as math.BigNumber;
    (z).toJSON = () => {
        return Number(math.larger(z, 100) ? math.round(z, 3) : math.round(z, 5));
    }
    return z;
}

console.log(JSON.stringify(bgn(5.555555444)));

而不是TS。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74593342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档