Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support of scientific notation #209

Open
Kukunin opened this issue Dec 5, 2018 · 7 comments
Open

Support of scientific notation #209

Kukunin opened this issue Dec 5, 2018 · 7 comments

Comments

@Kukunin
Copy link

Kukunin commented Dec 5, 2018

I believe that bn.js should support scientific notation for big numbers: a number 5e+21 or a string "5e+21" or both.

Current situation:

new BN('500000000000000000000').toString() // works well
new BN('5e+21').toString() // returns 63521 for some reason
new BN(500000000000000000000).toString() // throws Error: Assertion failed
new BN(5e+21).toString() // throws Error: Assertion failed

I don't know the reasons behind the assertion of big numbers, but at least it can support scientific notation as a string

@nblogist
Copy link

@Kukunin Having same issue 2 years later, what did you do to solve this?

Thanks!

@nblogist
Copy link

For anyone getting the same issue, apparently BN.js throws from 1e+21 and above, I solved it using the following function:

function toPlainString(num) { // BN.js Throws from 1e+21 and above so using this make shift function
					return (''+num).replace(/(-?)(\d*)\.?(\d+)e([+-]\d+)/,
					  function(a,b,c,d,e) {
						return e < 0
						  ? b + '0.' + Array(1-e-c.length).join(0) + c + d
						  : b + c + d + Array(e-d.length+1).join(0);
					  });
				  }

@qalqi
Copy link

qalqi commented Mar 28, 2021

Need fix for this

@samlaf
Copy link

samlaf commented Jul 14, 2022

I would also like to be able to do BigNumber.from('1e27').

@nblogist
Copy link

@samlaf this did the job for me 2 years back, is it not working now?

#209 (comment)

@june07
Copy link

june07 commented Jul 16, 2022

new BN(${Intl.NumberFormat('en-US').format(1e+99).replaceAll(',','')})

<BN: 1d42aea2879f2e44dea5a13ae3465277b06749ce90c777839e74404a7e8000000000000000000000000>

@samlaf
Copy link

samlaf commented Jul 19, 2022

Nice @june07 , but still think this should be hidden inside the library. Why do I need this ugly code in my user code?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants