The x: mechanism does first convert to floats, and then to rationals.
As long as your values are not too large, the result should be exact.

I imagine that it would be nice if dyadic ". or a workalike could
support direct interpretation as rational numbers.

FYI,

-- 
Raul


On Wed, Jan 6, 2021 at 4:48 AM Justin Paston-Cooper
<paston.coo...@gmail.com> wrote:
>
> Thanks. Seems to be working now, even with a parenthesis removed from
> each end. I wasn't getting a syntax error. Weird.
>
> I don't see what you mean by "doesn't give the number you suggest". I
> think I am missing something. 33333/50 is equal to 666.66. 333/50 is
> equal to 6.66. This is what I expected.
>
> As far as I understand, your solution parses strings to floats, and
> then converts to extended. Don says that the internal float
> representation is not an exact representation of the string. This
> would make sense. It may be the case that your examples correspond
> with the input numbers. I would imagine that for larger numbers there
> would be a discrepancy.
>
> ([: x: 0&".) '10000000000.12345' gives:
>
> 810000000010r81
>
> This is close, but not equal to the input.
>
> stringToRational '10000000000.12345' gives:
>
> 200000000002469r20000
>
> This is correct.
>
> My solution parses the digits exactly as if there were no dot and
> divides by 10^(number of digits after point).
>
> On Wed, 6 Jan 2021 at 12:20, Ric Sherlock <tikk...@gmail.com> wrote:
> >
> > Hi Justin,
> > I'm not entirely clear what your desired behaviour/use case is, however if
> > you add another closing parenthesis then your definition above does not
> > give a (syntax) error, but doesn't give the number you suggest.
> >
> > stringToRational =: ((_&".)@(-.&'.') %&:x: 10&^@(<:@# - (i.&'.')))
> >
> > stringToRational '666.66'
> >
> > 33333r50
> >
> > stringToRational '6.66'
> >
> > 333r50
> >
> >
> > Assuming you just want to represent all strings as their equivalent
> > rationals, is there a reason not to define stringToRational like this?
> >
> > stringToRational =: [: x: 0&".
> >
> > stringToRational '666.66'
> >
> > 33333r50
> >
> > stringToRational&> '66666';'6666.6';'666.66';'66.666';'6.6666';'0.66666'
> >
> > 66666 33333r5 33333r50 33333r500 33333r5000 33333r50000
> >
> >
> >
> > On Wed, Jan 6, 2021 at 8:20 PM Justin Paston-Cooper 
> > <paston.coo...@gmail.com>
> > wrote:
> >
> > > Thanks for the suggestion. I've combined Don's idea of using x: and
> > > your idea of removing the point and parsing that to handle all numbers
> > > of digits after the decimal point:
> > >
> > > stringToRational =: ((_&".)@(-.&'.') %&:x: 10&^@(<:@# - (i.&'.'))
> > >
> > > stringToRational '666.66' should give 333r50.
> > >
> > > Sadly this is giving a domain error, even though both sides of the
> > > fork work alone. Could anyone suggest how to fix this?
> > >
> > > On Tue, 5 Jan 2021 at 19:14, Jimmy Gauvin <jimmy.gau...@gmail.com> wrote:
> > > >
> > > > IF your strings always have two numbers after the decimal point you 
> > > > could
> > > > remove the point before converting to numeric.
> > > >
> > > > NB.Remove decimal point
> > > >    '.' -.~  each '123.45' ; '1456.12'
> > > > ┌─────┬──────┐
> > > > │12345│145612│
> > > > └─────┴──────┘
> > > >
> > > > NB. Convert to numeric
> > > >    _ ". > '.' -.~  each '123.45' ; '456.12'
> > > > 12345 45612
> > > >
> > > > NB. type 4 is integer
> > > >    3!:0 ] _ ". > '.' -.~  each '123.45' ; '456.12'
> > > > 4
> > > >
> > > > On Tue, Jan 5, 2021 at 10:43 AM Justin Paston-Cooper <
> > > > paston.coo...@gmail.com> wrote:
> > > >
> > > > > Hello,
> > > > >
> > > > > I am reading in tab-separated files with readdsv from 'tables/dsv'.
> > > > > Some columns consist of exact decimal numbers like 6.66. These
> > > generally
> > > > > involve amounts of a decimal currency. These are read in by readdsv as
> > > > > boxed strings. makenum from 'tables/csv' converts these strings to
> > > > > floats. I would like these strings to be converted exactly to
> > > > > rationals. How can I go about this in the easiest and most efficient
> > > > > way? I could not find information on parsing data types from strings.
> > > > >
> > > > > Thanks in advance,
> > > > >
> > > > > Justin
> > > > > ----------------------------------------------------------------------
> > > > > For information about J forums see http://www.jsoftware.com/forums.htm
> > > > >
> > > > ----------------------------------------------------------------------
> > > > For information about J forums see http://www.jsoftware.com/forums.htm
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> > >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to