首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(bignumber.js) "decimalPlaces“或"dp”无效

(bignumber.js) "decimalPlaces“或"dp”无效
EN

Stack Overflow用户
提问于 2020-09-28 15:21:55
回答 1查看 2.3K关注 0票数 0

我正在创建一个空闲的html5 5/js游戏,在这个游戏中,我使用bignumber.js库来存储任意长的数字,这是我对空闲游戏的要求。问题是,在配置中,我将EXPONENTIAL_AT选项设置为某个数字,并且在变量暴露大于EXPONENTIAL_AT之后,decimalPlaces函数不工作,即使使用"largeNumber.decimalPlaces(4)“,它也显示类似于"2.93012393841298e+23”的内容。

目前,脚本的部分内容如下:

代码语言:javascript
复制
BigNumber.config({
    DECIMAL_PLACES: 4,
    EXPONENTIAL_AT: 16,
    ROUNDING_MODE: BigNumber.ROUND_HALF_UP
});

var largeNumber = new BigNumber("10594.1931247123691823e+23");

console.log(largeNumber.dp(4).toString());

这显示在控制台中:1.05941931247123691823e+27,因此指数表示法有效,但舍入不起作用。

我不知道我做错了什么,或者是否是一个bug,但我希望这应该像预期的那样起作用。

EN

回答 1

Stack Overflow用户

发布于 2020-09-28 15:35:19

请记住,10594.1931247123691823e+23 (和1.05941931247123691823e+27)表示这个数字:

代码语言:javascript
复制
1059419312471236918230000000

正如你所看到的,它在小数点的右边没有小数,在小数点右边有零个有效数字。所以.dp(4)不会影响它。

如果您有一个带有小数部分的数字,.dp(4)就会工作。下面我做了一个例子。为了这个例子的目的,我告诉BigNumber在30位之前不要使用指数表示法,所以更明显的是发生了什么。但是--这仅仅是为了显示发生了什么--,这不是一个解决方案,你不需要这样做。没有问题需要解决:您的数字已经四舍五入(实际上);它是一个完整的数字。

下面是一个例子:

代码语言:javascript
复制
BigNumber.config({
    EXPONENTIAL_AT: 30,
});

// Just for reference:
const yourNumber = new BigNumber("10594.1931247123691823e+23");
console.log(yourNumber.toString());  // 1059419312471236918230000000

// Your number plus six places of fraction:
const num = BigNumber("1059419312471236918230000000.123456");
console.log(num.toString());         // 1059419312471236918230000000.123456

// Rounded:
const rounded = num.dp(4);
console.log(rounded.toString());     // 1059419312471236918230000000.1235
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/9.0.0/bignumber.min.js"></script>

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

https://stackoverflow.com/questions/64105047

复制
相关文章

相似问题

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