www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Help: Types Conversion libraries, where are thou?

reply jicman <jicman_member pathlink.com> writes:
Greetings!

Yes, it's me, your favorite Dominican learning D. :-)

Ok, so I need to change reals to integers and integers to real, int to long,
etc.  I have search through digitalmars.com and found nothing about this.  I did
see the phobos std.boxer, which is not working for me.  For example, this
program,

import std.stdio;
import std.math;
import std.string;
import std.boxer;
real toReal(int i)
{
Box b = box(i);
real r = unbox!(real)(b);
return r;
}
int toInt(real r)
{
Box b = box(r);
int i = unbox!(int)(b);
return i;
}
void main()
{
int i = 45; 
real r = 12.45;
writefln(i," ",r);
writefln(toReal(i)," ",toInt(r));
}

does not compile.  Here is the error:

jic 19:08:52-> build totypes.d 
c:\dmd\bin\..\..\dm\bin\link.exe
totypes,totypes.exe,,user32+kernel32,totypes.def/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

totypes.obj(totypes) 
Error 42: Symbol Undefined _assert_3std5boxer
--- errorlevel 1

What are the libraries that I have to do this or do I need to write my own?

thanks,

josť
Jul 22 2005
next sibling parent Holger <Holger_member pathlink.com> writes:
Well, how about simply using the cast() operator?

Cheers,
Holger


In article <dbrung$1t68$1 digitaldaemon.com>, jicman says...
Greetings!

Yes, it's me, your favorite Dominican learning D. :-)

Ok, so I need to change reals to integers and integers to real, int to long,
etc.  I have search through digitalmars.com and found nothing about this.  I did
see the phobos std.boxer, which is not working for me.  For example, this
program,

import std.stdio;
import std.math;
import std.string;
import std.boxer;
real toReal(int i)
{
Box b = box(i);
real r = unbox!(real)(b);
return r;
}
int toInt(real r)
{
Box b = box(r);
int i = unbox!(int)(b);
return i;
}
void main()
{
int i = 45; 
real r = 12.45;
writefln(i," ",r);
writefln(toReal(i)," ",toInt(r));
}

does not compile.  Here is the error:

jic 19:08:52-> build totypes.d 
c:\dmd\bin\..\..\dm\bin\link.exe
totypes,totypes.exe,,user32+kernel32,totypes.def/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

totypes.obj(totypes) 
Error 42: Symbol Undefined _assert_3std5boxer
--- errorlevel 1

What are the libraries that I have to do this or do I need to write my own?

thanks,

josť

Jul 22 2005
prev sibling parent reply David L. Davis <SpottedTiger yahoo.com> writes:
In article <dbrung$1t68$1 digitaldaemon.com>, jicman says...
Greetings!

Yes, it's me, your favorite Dominican learning D. :-)

Ok, so I need to change reals to integers and integers to real, int to long,
etc.  I have search through digitalmars.com and found nothing about this.  I did
see the phobos std.boxer, which is not working for me.  For example, this
program,

import std.stdio;
import std.math;
import std.string;
import std.boxer;
real toReal(int i)
{
    Box b = box(i);
    real r = unbox!(real)(b);
    return r;
}
int toInt(real r)
{
    Box b = box(r);
    int i = unbox!(int)(b);
    return i;
}
void main()
{
    int i = 45; 
    real r = 12.45;
    writefln(i," ",r);
    writefln(toReal(i)," ",toInt(r));
}

does not compile.  Here is the error:

jic 19:08:52-> build totypes.d 
c:\dmd\bin\..\..\dm\bin\link.exe
totypes,totypes.exe,,user32+kernel32,totypes.def/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

totypes.obj(totypes) 
Error 42: Symbol Undefined _assert_3std5boxer
--- errorlevel 1

What are the libraries that I have to do this or do I need to write my own?

thanks,

josť

josť, to compile using the std.boxer you should always use the "-release" commandline switch...but in your conversion example above doesn't appear to need the std.boxer for your 'int to real' / 'real to int' example. So, I put a little something together below that I hope you'll find helpful: # // ex072205.d # private import std.stdio; # # int roundToInteger(in real r) # { # return cast(int)((r < 0.0L) ? r - 0.5L : r + 0.5L); # } # # real toReal(int i) # { # return cast(real)i; # } # # int toInt(real r) # { # if (r < int.min || r > int.max) # diehard("Real value is larger or smaller than an integer."); # else if (r == real.nan) # diehard("Can't convert a NaN to an integer."); # else if (r == -real.infinity || r == real.infinity) # diehard("Can't convert an +/- Infinity value to an integer."); # # return roundToInteger(r); # } # # private void diehard(in char[] s) # { # throw new Exception(s); # } # # void main() # { # int i = 45; # real r = 12.45; # # writefln("Normal: int=", i, " real=", r); # writefln("Conversion: int=", toReal(i), " real=", toInt(r)); # } Output: --------- C:\dmd>dmd ex072205.d C:\dmd\bin\..\..\dm\bin\link.exe ex072205,,,user32+kernel32/noi; C:\dmd>ex072205 Normal: int=45 real=12.45 Conversion: int=45 real=12 C:\dmd> David L. P.S. If you're still looking into some useful functions to use with the std.boxer module you can check out my Box-Xtras Support section (link below). http://spottedtiger.tripod.com/D_Language/D_BoxXtras_Support_Projects_XP.html ------------------------------------------------------------------- "Dare to reach for the Stars...Dare to Dream, Build, and Achieve!" ------------------------------------------------------------------- MKoD: http://spottedtiger.tripod.com/D_Language/D_Main_XP.html
Jul 22 2005
parent jicman <jicman_member pathlink.com> writes:
Thanks David.

josť

David L. Davis says...
In article <dbrung$1t68$1 digitaldaemon.com>, jicman says...
Greetings!

Yes, it's me, your favorite Dominican learning D. :-)

Ok, so I need to change reals to integers and integers to real, int to long,
etc.  I have search through digitalmars.com and found nothing about this.  I did
see the phobos std.boxer, which is not working for me.  For example, this
program,

import std.stdio;
import std.math;
import std.string;
import std.boxer;
real toReal(int i)
{
    Box b = box(i);
    real r = unbox!(real)(b);
    return r;
}
int toInt(real r)
{
    Box b = box(r);
    int i = unbox!(int)(b);
    return i;
}
void main()
{
    int i = 45; 
    real r = 12.45;
    writefln(i," ",r);
    writefln(toReal(i)," ",toInt(r));
}

does not compile.  Here is the error:

jic 19:08:52-> build totypes.d 
c:\dmd\bin\..\..\dm\bin\link.exe
totypes,totypes.exe,,user32+kernel32,totypes.def/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

totypes.obj(totypes) 
Error 42: Symbol Undefined _assert_3std5boxer
--- errorlevel 1

What are the libraries that I have to do this or do I need to write my own?

thanks,

josť

josť, to compile using the std.boxer you should always use the "-release" commandline switch...but in your conversion example above doesn't appear to need the std.boxer for your 'int to real' / 'real to int' example. So, I put a little something together below that I hope you'll find helpful: # // ex072205.d # private import std.stdio; # # int roundToInteger(in real r) # { # return cast(int)((r < 0.0L) ? r - 0.5L : r + 0.5L); # } # # real toReal(int i) # { # return cast(real)i; # } # # int toInt(real r) # { # if (r < int.min || r > int.max) # diehard("Real value is larger or smaller than an integer."); # else if (r == real.nan) # diehard("Can't convert a NaN to an integer."); # else if (r == -real.infinity || r == real.infinity) # diehard("Can't convert an +/- Infinity value to an integer."); # # return roundToInteger(r); # } # # private void diehard(in char[] s) # { # throw new Exception(s); # } # # void main() # { # int i = 45; # real r = 12.45; # # writefln("Normal: int=", i, " real=", r); # writefln("Conversion: int=", toReal(i), " real=", toInt(r)); # } Output: --------- C:\dmd>dmd ex072205.d C:\dmd\bin\..\..\dm\bin\link.exe ex072205,,,user32+kernel32/noi; C:\dmd>ex072205 Normal: int=45 real=12.45 Conversion: int=45 real=12 C:\dmd> David L. P.S. If you're still looking into some useful functions to use with the std.boxer module you can check out my Box-Xtras Support section (link below). http://spottedtiger.tripod.com/D_Language/D_BoxXtras_Support_Projects_XP.html ------------------------------------------------------------------- "Dare to reach for the Stars...Dare to Dream, Build, and Achieve!" ------------------------------------------------------------------- MKoD: http://spottedtiger.tripod.com/D_Language/D_Main_XP.html

Jul 22 2005