954,498 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

int to float to float to int

i need help
I need to display
Example
23.4
and display 23 and .4

how do i do this?

so i need to convert a decimal into fraction
like this
http://www.cimt.plymouth.ac.uk/projects/mepres/book7/bk7i17/bk7_17i1.htm
i need to display 4 and 0.276

yasaswyg
Light Poster
43 posts since Jul 2009
Reputation Points: 6
Solved Threads: 0
 
I need to display Example 23.4 and display 23 and .4


One easy way is with the type system. When you cast a floating point value it cuts off the precision. If you subtract that result from the original, you get the precision:

double d = 23.4;
double w = (int)d; /* w == 23.0 */
double p = d - w; /* p == 0.4 */
Tom Gunn
Master Poster
733 posts since Jun 2009
Reputation Points: 1,446
Solved Threads: 135
 

just do type casting

MrNoob
Posting Whiz in Training
218 posts since May 2009
Reputation Points: 34
Solved Threads: 7
 

One easy way is with the type system. When you cast a floating point value it cuts off the precision. If you subtract that result from the original, you get the precision:

double d = 23.4;
double w = (int)d; /* w == 23.0 */
double p = d - w; /* p == 0.4 */

DAMN thats common sense
THanks alot.

yasaswyg
Light Poster
43 posts since Jul 2009
Reputation Points: 6
Solved Threads: 0
 

idk what that means

yasaswyg
Light Poster
43 posts since Jul 2009
Reputation Points: 6
Solved Threads: 0
 

you dont know what what means? casting? start from the beginning of Tom Gunns code snippet:

'd' is a double (floating point) variable containing 23.4.

'w' is a double variable set to the value of 'd' once 'd' is casted as an integer. (see where 'd' is casted as an integer by the use of 'int' type in parentheses.) now 'w' contains the whole value 23.0 with no fractional part.

'p' is another double variable that is the value of the difference between 'd' and 'w'... since 'd' is 23.4 and 'w' is 23.0, the difference is 0.4, and this fractional part is assigned to 'p'

now 'd' still contains the original decimal value (23.4), and 'w' contains the whole number (23) and 'p' contains the fractional part (0.4)


.

jephthah
Posting Maven
2,587 posts since Feb 2008
Reputation Points: 2,143
Solved Threads: 179
 

im sorry but i havent learned that in my class

you dont know what what means? casting? start from the beginning of Tom Gunns code snippet:

'd' is a double (floating point) variable containing 23.4.

'w' is a double variable set to the value of 'd' once 'd' is casted as an integer. (see where 'd' is casted as an integer by the use of 'int' type in parentheses.) now 'w' contains the whole value 23.0 with no fractional part.

'p' is another double variable that is the value of the difference between 'd' and 'w'... since 'd' is 23.4 and 'w' is 23.0, the difference is 0.4, and this fractional part is assigned to 'p'

now 'd' still contains the original decimal value (23.4), and 'w' contains the whole number (23) and 'p' contains the fractional part (0.4)

.

yasaswyg
Light Poster
43 posts since Jul 2009
Reputation Points: 6
Solved Threads: 0
 

i need help I need to display Example 23.4 and display 23 and .4

how do i do this?

I'm trying to do something similar, only instead of displaying the numbers, I need to store them. I need to store both as ints, though.

The problem I'm running into is coming up with a generic algorithm for storing the 0.4 part as just 4. I don't know how many digits the number will be every time, so I can't use a constant multiplier to move the decimal.

This is what I've come up with so far: float n = 123.456;

// 123
int nw = (int)n;

// 456
int nf = (int)( ( n - nw ) * pow( 10, ??? ) );

I would much prefer a mathematical solution, but I would be willing to convert to a string and back, if that's the only way.

42Wired
Newbie Poster
13 posts since Aug 2009
Reputation Points: 10
Solved Threads: 0
 

Floating type does not have fixed precision.
and if you enter
123.456
try to print that variable - you'll get something like that
123.455969706597869578956
So you have to convert its number into string and parse it.

Or choose precision and your code will be like that

int prec = 5;
int nf = (int)( ( n - nw ) * pow( 10, prec ) );

But this method is not precise.

Protuberance
Junior Poster in Training
90 posts since Aug 2009
Reputation Points: 78
Solved Threads: 17
 

Is there a better (faster) way to convert than sprintf() that you know of? I'm working in a real-time system, and sprintf() is computationally expensive.

42Wired
Newbie Poster
13 posts since Aug 2009
Reputation Points: 10
Solved Threads: 0
 

Floating type does not have fixed precision. and if you enter 123.456 try to print that variable - you'll get something like that 123.455969706597869578956 So you have to convert its number into string and parse it.

Or choose precision and your code will be like that

int prec = 5;
int nf = (int)( ( n - nw ) * pow( 10, prec ) );

But this method is not precise.

It needs to be the precision the user defines the float to be.

I'm trying to create a function in the format

void func1( char *c1, float f1, float f2, float f3 )

that will simulate another function in the format

void func2( char *c1, int i1, int i2, int i3, int i4, int i5, int i6 )


by pulling apart the float arguments and passing them as int arguments (e. g., 1, 2, 3, 4, 5, 6 instead of 1.2, 3.4, 5.6).

Even if I use sprintf() for the fraction part of the number, I still need to know the length of the number for precision so I don't get a bunch of trailing garbage, right? For example wouldn't the following code yield trailing garbage on char *str?

char *str;
int n = 123.456;
sprintf( str, "%f" n );
42Wired
Newbie Poster
13 posts since Aug 2009
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You