HP Forums

Full Version: Long decimal results instead of scientific notation?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Is there a way to get the prime to show all possible leading zeroes in CAS (or normal) mode, for example, to show 0.00000000000000000000981 instead of 9.81E-21?

I have it in standard notation mode.
I'm no Prime guru, but it seems unlikely, 'cuz what should it show if the number was 1.0E-250? 250 leading zeros?
I would try using the logarithm of the number to create a string of zeroes and padding
the significant numbers to the end.

The log of 9.81e-21 is about -20.00833988260. Use the absolute value of the
integer. Create a loop to make the zero padded string. Pad the string with 981.

There may be a simpler way.

It is like programming in c where you have to create your own string functions.

I hope this will help get you started.
(06-23-2021 09:08 PM)matalog Wrote: [ -> ]Is there a way to get the prime to show all possible leading zeroes in CAS (or normal) mode, for example, to show 0.00000000000000000000981 instead of 9.81E-21?

I have it in standard notation mode.

Sort of. In CAS, the command:
format(9.81E-21,"f23")
returns the string "0.00000000000000000000981"

A program could be written, I suppose, which would calculate the necessary second argument of format() to obtain the desired output for any given input.

If you're looking for a display mode that automatically displays all leading zeros, sorry, there is no such mode.
I came up with a program to print 9.81e-21 in the format you wanted.

It is free form, off the cuff, coding at the keyboard with no optimization.

I hope to recode it later.

Code:

EXPORT numstr01()
BEGIN
local i;
local n,nl,na,nal;
local s,z;
local zi,zl;
local t1,t2,t3;
local t4;
local newline;
print;
newline := "\n";
z :="0";
n := 9.81e-21;
nl := log(n);
// print(n + ", " + nl + ", " + z );
// print(newline);
na := abs(nl);
zl := trunc(na);
// print (na + ", " + zl);
t1 := nl + zl;
t2 := 10^t1;
// print(newline);
// print(t1 + ", " + t2);
t3 := trunc(1000*t2);
// print(t3);
t4 := "0.";
for i from 1 to zl
do
t4 := t4 + z;
end;
print(n+" = " + t4+t3);
END;

Not one for the software engineers but it gets the job done.

Cheers.
Take a look at this program.

Type a number, eg. 9.81e-21 on the command line in HOME.

Type PLZ to launch. It will print and return the desire format on to the stack.
You can change the print() statement to msgbox if you want.

There is a variable named sf if you want to change the number of siginificant
figures.

Thanks for the tip about getting input via Ans(1).

edit: This is very alpha software. It seems to work with numbers less
than one. It will not work in CAS mode. Perhaps the second trunc
function should be a Round function. Perhaps this program can
serve as a base for another one. There are limitations when the
exponent is less that -100. Perhap a version that did not depend
on logarithms and exponents would work better.

Code:

cls();
gans();
EXPORT plz()
BEGIN
local a,b,c;
local d1,f,g;
local h,i,k;
local sf;  // significant figures
local z;
sf := 3;
z := "0";
cls();
a := gans();
b := log(a);
c := abs(b);
d1 := trunc(c);
f := b + d1;
g := 10 ^ f;
h := trunc((10^sf) * g);
k := "0.";
for i from 1 to d1
do
k := k + z;
end;
print (k+h);
END;
cls()
begin
print;
end;
gans()
begin
return Ans(1);
end;
Reference URL's