在莲花脚本中执行22位数字的划分

Muj*_*hat 1 javascript lotus-notes lotusscript lotus-formula

我想进行22位数的分割.在莲花剧本.

谁能告诉我怎么做?我没有得到正确的结果.

例如;

dim num as Double;

dim num1 as Double;

NUM = 123456789989898976765;

num1 = num/97;

但我没有在num1中得到正确的结果.

Mar*_*her 6

为了满足我的数学家,我必须告诉你,你永远不会得到"正确的"答案,除法产生一个具有无限小数的数字,但我认为你得到的是你所追求的.你想要的号码是:

1 272 750 412 266 999 760.463 917 525 ...
Run Code Online (Sandbox Code Playgroud)

但你得到的数字是:

1 272 750 412 266 999 800
Run Code Online (Sandbox Code Playgroud)

这是由于语言使用的数字格式缺乏精确性.当您进行除法时,不会发生精度损失,只要将常量分配给变量,它就会发生得更快.您存储的号码是:

123 456 789 989 898 976 765
Run Code Online (Sandbox Code Playgroud)

但你实际存储的数字是:

123 456 789 989 898 980 000
Run Code Online (Sandbox Code Playgroud)

这就是导致错误答案的原因.

由于我不了解Lotus Script环境,我会做两件事; 首先,给你一些代码来解决这个特殊问题,如下所示:

var num = [12345678998, 9898976765];
var num1 = num[0] / 97;
var num2 = Math.floor(num1);
num2 = num1 - num2;
num2 *= 97;
num2 = Math.round(num2)
num2 *= Math.pow(10, num[1].toString().length);
num2 = (num2 + num[1]) / 97;
alert(Math.floor(num1).toString() + num2.toString());
Run Code Online (Sandbox Code Playgroud)

然后,您可以概括以满足您的需求.此代码将分区拆分为数字存储格式CAN处理的两个较小的分区,并将第一个分区的剩余部分添加到第二个分区,产生以下结果:

1 272 750 412 266 999 760.463 917 7
Run Code Online (Sandbox Code Playgroud)

这不是确切的,但可能足够接近,对吗?如何将较大的数字拆分成碎片而不会失去精确度,这就是你的两个问题.(提示:使用字符串)

其次,我将指向BigInt.js,这是一个用于在JavaScript中使用任意大整数进行数学运算的库.如果您可以将此库包含在您的代码中,那么这绝对是更经济的方式.

我希望其中一个有所帮助.