Re: Fractional part of decimal value.
Carlo Capelli <[email protected]>
| Newsgroups | gmane.comp.ai.prolog.swi |
|---|---|
| Message-ID | <CABty9wzy-xtDZQGNH5w1_ceUOVyZP2hVh3vPgc9andPSrZ_RJA@mail.gmail.com> |
2013/8/7 Jan Wielemaker <[email protected]> > On 08/07/2013 05:15 PM, Carlo Capelli wrote: > >> Hi Wouter >> >> >> when I had to compute numbers with fixed precisions (for instance, >> presenting prices after taxes or discounts) I resorted to 'hardcode' the >> precision in this way (here 2 decimal digits - actually � cents) >> >> ... >> TwoDec is round(NoIva * 100) / 100, >> ... >> >> or, using lambda: >> >> ... >> FmtNum = \I^O^(T is round(I * 100) / 100, atom_number(A, T), >> replace_word('.',',',A,O)), >> ... >> call(FmtNum, DeltaG, DeltaF), >> call(FmtNum, Rate, RateF), >> call(FmtNum, Ivato, IvatoF), >> call(FmtNum, Cost, CostF), >> > > Is this any different from this (assuming you do the . --> , for > locale purposes)? > > Of course, no. > LC_NUMERIC=nl_NL.UTF-8 swipl-win > 1 ?- format(atom(X), '~2:f', 1/3). > X = '0,33'. > > (note the swipl-win :-) > > From where it come ? :) > Cheers --- Jan > > > > > ... >> >> HTH >> >> >> >> 2013/8/7 Wouter Beek <[email protected]> >> >> Hi all, >>> >>> I want to extract the integer and fractional part of a decimal value: >>> ~~~{.pl} >>> decimal_parts(D, I, F):- >>> I is floor(D / 1), >>> F is D - I * 1. >>> ~~~ >>> What I get is the fractional part of the float value 1.1: >>> ~~~ >>> ?- decimal_parts(1.1, _, F). >>> F = 0.10000000000000009. >>> ~~~ >>> I do not mind the padding zero's (just a notational difference), but I do >>> not need the 9 at the end. >>> >>> Is there a way to get the same result as with e.g. C's modf (sample code >>> below)? Thanks for any suggestions! >>> >>> --- >>> Cheers, >>> Wouter. >>> >>> Sample code in C: >>> ~~~{.c} >>> #include <stdio.h> >>> #include <math.h> >>> >>> int main() { >>> double param, fractional_part, integer_part; >>> param = 1.1; >>> fractional_part = modf(param, &integer_part); >>> printf("%f = %f + %f \n", param, integer_part, fractional_part); >>> return 0; >>> } >>> ~~~ >>> >>> Compile and run: >>> ~~~ >>> $ gcc -Wall test.c -o test >>> $ ./test >>> 1.100000 = 1.000000 + 0.100000 >>> ~~~ >>> >>> E-mail: [email protected] >>> WWW: www.wouterbeek.com >>> Tel.: 0647674624 >>> -------------- next part -------------- >>> HTML attachment scrubbed and removed >>> ______________________________**_________________ >>> SWI-Prolog mailing list >>> [email protected].**de <[email protected]> >>> https://lists.iai.uni-bonn.de/**mailman/listinfo.cgi/swi-**prolog<https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog> >>> >>> -------------- next part -------------- >> HTML attachment scrubbed and removed >> ______________________________**_________________ >> SWI-Prolog mailing list >> [email protected].**de <[email protected]> >> https://lists.iai.uni-bonn.de/**mailman/listinfo.cgi/swi-**prolog<https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog> >> >> > -------------- next part -------------- HTML attachment scrubbed and removed _______________________________________________ SWI-Prolog mailing list [email protected] https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog