我想執行22位數字的分割。在蓮花腳本。在蓮花腳本中進行22位數字的分割
任何人都可以請告訴我該怎麼做嗎?我沒有得到正確的結果。
例如;
dim num as Double;
dim num1 as Double;
num = 123456789989898976765;
num1 = num/97;
但我沒有在num1中得到正確的結果。
我想執行22位數字的分割。在蓮花腳本。在蓮花腳本中進行22位數字的分割
任何人都可以請告訴我該怎麼做嗎?我沒有得到正確的結果。
例如;
dim num as Double;
dim num1 as Double;
num = 123456789989898976765;
num1 = num/97;
但我沒有在num1中得到正確的結果。
爲了滿足我的數學家,我要告訴你,你永遠不會得到「正確」的答案時,除法運算產生了許多具有無限小數,但我想,我會得到你想要的。你想數爲:
1 272 750 412 266 999 760.463 917 525 ...
但你得到數爲:
1 272 750 412 266 999 800
這是由於在語言使用的數字格式缺乏精確性。當您進行除法時,精度的損失不會發生,只要您將該常量分配給變量,就會比此更早發生。你想存儲的號碼是:
123 456 789 989 898 976 765
但你數量實際上存儲是:
123 456 789 989 898 980 000
這是在錯誤的答案是什麼結果。
因爲我不知道蓮花腳本環境,我會做兩件事;首先,給你一些代碼,將解決這方面的問題,比如:
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());
,然後可以推廣到適合您的需求。此代碼分裂分裂成兩個較小的部門,該數字存儲格式可以處理,並增加了第一個餘數到第二,產生這樣的結果:
1 272 750 412 266 999 760.463 917 7
這是不準確的,但可能足夠接近,對?你如何將更大的數字分割成片段而不會失去精確度,這是你的兩倍。 (提示:使用字符串)
其次,我將指出BigInt.js,這是一個在JavaScript中用任意大整數進行數學運算的庫。如果你可以將這個庫加入你的代碼中,那肯定是更經濟的方法。
我希望這些幫助之一。
問題是您正在使用浮點數作爲除法,這將不會產生準確的結果。 Lotusscript不支持除浮點數以外的大數字,所以你應該找到另一種方法來計算。例如,如果您可以使用Java編寫代碼,則可以更好地支持大數字。或者,如另一個示例所示,您顯然也可以在JavaScript中處理此問題。
我用Java寫了一個腳本庫來解決這個問題,稱那是從我的蓮花腳本代理:
下面是代碼:
//importing the required libraries
import lotus.domino.*;
import java.math.BigInteger;
public class CalcProofNo
{
BigInteger BD_97 = new BigInteger("97");
BigInteger BD_98 = new BigInteger("98");
public int calBBAN(String strBBAN) {
//Gets the Basic Bank Account Number into BigInteger
BigInteger BBAN = new BigInteger(strBBAN);
//Calaculating Mod by dividing the Basic Bank Account Number by 97
BBAN= BBAN.divideAndRemainder(BD_97)[1];
//Subtracting 98 from the modulus
BBAN = BD_98.subtract(BBAN);
//Returning proof number in integer
return BBAN.intValue();
}
}
蓮花腳本代理代碼:
Option Public
Use "CalcProofNo"
Uselsx "*javacon"
Dim javaSession As JAVASESSION
Dim javaUtil As Variant
Dim javaUtilClass As Variant
Set javaSession = New JAVASESSION
'Getting defined Class in ScriptLibrary
Set javaUtilClass = javaSession.GetClass("CalcProofNo")
'Creating object for it
Set javaUtil =javaUtilClass.CreateObject()
' passing parameters to method, calling the method using object.
strProofNumber = Cstr(javaUtil.calBBAN(strBBAN))
並使用LS2J從LotusScript中調用Java函數。 –