Java: Is x a Power of 10?

Well, this took awhile to figure out. I wrote a Roman Numeral converter for my Java final and one of the requirements states: Subtract only powers of ten, such as I, X, or C. Writing VL for 45 is not allowed: write XLV instead.

This means I had to see if the number I’m working with was a power of 10. Initially, I did it the manual way like if i == 10 || i == 100, etc but figured there had to be a better way. I asked my physicist friend what math function I’d use and he suggested log. I tried using Java’s Math.log function but kept coming up with really weird numbers. Math.pow looked like a good possiblity but I couldn’t figure out how to compare 1.0E2 to 1.0.

So from 5:00pm to 8:00pm I tried about a hundred things, talked to about four people and even posted to the Sun Java forums. My always-reliable friend Lee from Microsoft walked me through a few things and explained that Java’s log base is e (~ 2.71828) and I needed the base to be 10. How would I get it? The Sun bug database entry for adding pow10 gave me the answer: Math.log(x)/Math.log(10). I implemented that into my code until I scrolled down to the resolution “Being considered as part of larger math library effort in 1.5.”

From there, I plugged “pow10 java” into the Google and found that pow10 is a part of StrictMath. The final solution looks something like this: if (StrictMath.log10(index)%1 == 0 && index>1) . Because StrictMath.log10(0)%1 equals 0, I had to add index>1. Instead of using mod, I could have also checked for StrictMath.log10(index) == (int)StrictMath.log10(index).

Chrissy is a PowerShell MVP who has worked in IT for nearly 20 years, and currently serves as a Sr. Database Engineer in Belgium. Always an avid scripter, she attended the Monad session at Microsoft’s Professional Developers Conference in Los Angeles back in 2005 and has worked and played with PowerShell ever since. Chrissy is currently pursuing an MS in Systems Engineering at Regis University and helps maintain in her spare time. She holds a number of certifications, including those relating to SQL Server, SuSE Linux, SharePoint and network security. She recently became co-lead of the SQL PASS PowerShell Virtual Chapter. You can follow her on Twitter at @cl.

Posted in General

Leave a Reply

Your email address will not be published. Required fields are marked *