Thanks. That should do the job.

On Wed, 6 Jan 2021 at 21:04, Devon McCormick <[email protected]> wrote:
>
> I suspect you are messing around with meaningless precision if these
> numbers are coming from a spreadsheet since they are already in floating
> point format there but this may do what you need:
>
> stringToRational=: 3 : 0
>    if. 1=#tmp=. <;._1 '.',y do. tmp=. tmp,<,'0' end.
>    ".(;tmp),'r1','0'$~#;1{tmp
> )
>
>    stringToRational &>
> '123.00';'123';'1';'1010101010.10101';'0.1';'2.';'123456789101112.1314151617'
> 123 123 1 101010101010101r100000 1r10 2
> 1234567891011121314151617r10000000000
>
>    NB. Visually verifying the ridiculous ones:
>    28j10":"0 ] 101010101010101r100000 1234567891011121314151617r10000000000
>        1010101010.1010100000
>   123456789101112.1314151617
>
>
> On Wed, Jan 6, 2021 at 11:04 AM Henry Rich <[email protected]> wrote:
>
> > For domain errors, Look at the Dissect tool.
> >
> > Henry Rich
> >
> > On 1/6/2021 3:40 AM, Justin Paston-Cooper wrote:
> > > I should add how it works:
> > >
> > > On the right, 10^(The position of '.' in the number minus 1)
> > > On the left, remove '.' and parse as number
> > > In the middle, apply x: to both sides and divide.
> > >
> > > Also, how can I go about actually debugging domain errors? Both sides
> > > seem to be zero-dimensional.
> > >
> > > On Wed, 6 Jan 2021 at 10:20, Justin Paston-Cooper
> > > <[email protected]> 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 <[email protected]>
> > 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 <
> > >>> [email protected]> 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
> >
> >
> > --
> > This email has been checked for viruses by AVG.
> > https://www.avg.com
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
>
> --
>
> Devon McCormick, CFA
>
> Quantitative Consultant
> ----------------------------------------------------------------------
> 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