bignumber.js“ decimalPlaces”或“ dp”不起作用

问题描述

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

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

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,因此指数表示法有效,但舍入无效。

我不知道我在做什么错或者是一个错误,但是我希望这应该可以正常工作。

解决方法

请记住,10594.1931247123691823e+23(和1.05941931247123691823e+27)代表此数字:

1059419312471236918230000000

如您所见,它根本没有小数部分 ,小数点右边的有效数字为零。因此.dp(4)不会影响它。

如果您的数字有小数部分,则.dp(4)可以使用。我在下面做了一个例子。出于示例的目的,我已告诉BigNumber在30位数字之前不要切换到指数表示法,所以这很明显是怎么回事。但这只是为了显示正在发生的事情,这不是解决方案,您不必这样做。没问题要解决:您的数字已经四舍五入(实际上);这是一个整数。

这里是例子:

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
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/9.0.0/bignumber.min.js"></script>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...