ProgrammingThis forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Yeah, it does, once you reach the limit, although admittedly it is quite a few decimal places, 0.9999999999999999 or whatever amount, I guess it just depends on what they're doing or whatever size of numbers they'll be dealing with, either way, they've got two suggestions now so....
ive just tried myself and have written the following to test if typecasting rounds because i was pretty sure it didnt, anyway i wrote the following program
Code:
import java.util.*;
import java.lang.Math.*;
class rounding
{
public static void main(String[] args)
{
for(int p=0;p<25;p++) {
double num = (double)10 - Math.pow(10, -p);
int iPart = (int)num;
double fPart = num - (double)iPart;
System.out.println("num: "+num+"\tip: "+iPart+"\tfp: "+fPart);
}
}
}
as you can see iPart is always the integer part of num, it doesnt round, however 9.99999... does eventually round to 10.0, i think this is what led you to your conclusion that typecasting to an int rounds but as you can see it doesnt.
So what's happening is when the type reaches it's precision limit for it's size it's been rounded up because of that not because of casting?
Goes to show appearances can be deceptive and looking again my overblown way would have suffered from the exact thing it was trying to prevent because it parsed back into a number.
Another little bit of insight gleemed from the LQ boards
everbody needs help sometimes, took me 3 minutes to write that program then over an hour to compile/run it
Quote:
So what's happening is when the type reaches it's precision limit for it's size it's been rounded up because of that not because of casting?
yep
Quote:
looking again my overblown way would have suffered from the exact thing it was trying to prevent because it parsed back into a number.
your method would suffer like mine but it would be due to the fact that number would be rounded up at the point you set it, which is obviosly before you convert it into a string. however your method is slightly more accurate than mine because i subtract and hence introduce numerical errors, you method has no loss of accuracy at all.
Quote:
Another little bit of insight gleemed from the LQ boards
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.