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
