Copy link to clipboard
Copied
I'm struggling to work out a simple script to calculate the total cost after a specific number of units are added, but remain at base cost for the first 3 units.
For instance:
etc.
The Excel formula that gives this result is:
=475+MAX(0,4-3)*50
Of course, that works in Excel, but not Acrobat.
The JavaScript code I've attempted is:
var ffcondo = Number(this.getField("FFCondo").value);
var pgcountcondo = Number(this.getField("PGcountCondo").value);
if (pgcountcondo == "") event.value = "";
else event.value = (ffcondo+(pgcountcondo-3)*50) <= 475 ? 475 : (ffcondo+(pgcountcondo-3)*50);
Unfortunately, the results I get with that JavaScript code are unreliable. Sometimes the result is correct; more often it's wrong. I'm very much a JavaScript novice. Attached is the file I'm working with.
After guidance from Bernd_Alheit and try67, this is the JavaScript I ended up using:
var pgcountcondo = Number(this.getField("PGcountCondo").value);
if (pgcountcondo == "") event.value = "";
else {
var v = (475+(pgcountcondo-3)*50);
event.value = Math.max(v, 475);
}
Copy link to clipboard
Copied
For the calculation of field "FFCondo" you use the value of field "FFCondo".
Why does you use this recursive calculation?
Copy link to clipboard
Copied
Bernd:
I'm not entirely sure what you're asking. I normally don't write much JavaScript, and therefore I'm a novice in this area.
Perhaps linking to a Google Sheet that shows explicitly what I'm attempting to do will help:
Copy link to clipboard
Copied
Why does you use for the calculation of field "FFCondo" the value of field "FFCondo"?
Copy link to clipboard
Copied
Bernd: Thank you for clarifying that.
Here's what I changed the JS in FFCondo to:
var ffcondo = Number(this.getField("FFCondo").value);
var pgcountcondo = Number(this.getField("PGcountCondo").value);
if (pgcountcondo == "") event.value = "";
else event.value = (475+(pgcountcondo-3)*50) <= 475 ? 475 : (475+(pgcountcondo-3)*50);
So far, it seems to calculate results correctly. I haven't tested it exhaustively yet, but it looks promising.
Thank you!
Copy link to clipboard
Copied
That last line is quite clanky. I would replace it with this:
else {
var v = (475+(pgcountcondo-3)*50);
event.value = Math.max(v, 475);
}
Copy link to clipboard
Copied
After guidance from Bernd_Alheit and try67, this is the JavaScript I ended up using:
var pgcountcondo = Number(this.getField("PGcountCondo").value);
if (pgcountcondo == "") event.value = "";
else {
var v = (475+(pgcountcondo-3)*50);
event.value = Math.max(v, 475);
}