Regina, thanks for your answer. But can you tell me how to call Calc functions inside the macro? I searched in docs and in the Google and don't found any clue.
By the way, just now I tought the possibility to rewrite math functions using "string" to encode the number to avoid error because I remembered BCD. :-) Regards Alex Mitsio Sato On Thu, Jul 5, 2012 at 8:27 PM, Regina Henschel <[email protected]>wrote: > Hi, > > alex sato schrieb: > > Hi, >> >> I have a problem with functions I made. >> >> Let's say I create the function: >> >> Function Test (n) >> dim r(3) >> r(0)=int(n) >> r(1)=n-r(0) >> r(2)=r(1)*100 >> r(3)=int(r(2)) >> Test = r >> End Function >> >> Then, in a empty spreadsheet take the following steps: >> -select A1:D1 >> -press [F2] >> -Insert the formula =TEST(E1) >> -press [CTRL]+[SHIFT]+[ENTER] >> -insert 11,18 in E1 and see the result in cell D1 >> >> I think the result should be 18 but I'm getting 17 >> Where is the error? >> > > It is the normal behavior of data type double. 11,18 has indefinite digits > in dual system. So the stored value is cut somewhere. Because there are > enough binary digits to round the dual number to 15 decimal digits, you do > not notice it. But when you subtract the integral part, the others digits > will shift left and new digits will be generated at the end, which does not > represent the original value. The calculated difference becomes a little > bit to small. After multiply with 100 you do not have 18,00 but 17,99... > And that results in 17. The problem becomes more visible, when the integral > part is larger. > > You should not use Basic functions, but use Calc functions instead. They > are often tweaked to avoid such problems. You can call Calc functions > inside your Macro. > > To get the first two decimal digits as integer value, it seems to be more > accurate to use > r(3)=(n * 100) mod 100 > in your macro. > > Kind regards > Regina > > > > > -- > For unsubscribe instructions e-mail to: [email protected].** > org <users%[email protected]> > Problems? http://www.libreoffice.org/**get-help/mailing-lists/how-to-** > unsubscribe/<http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/> > Posting guidelines + more: http://wiki.**documentfoundation.org/** > Netiquette <http://wiki.documentfoundation.org/Netiquette> > List archive: > http://listarchives.**libreoffice.org/global/users/<http://listarchives.libreoffice.org/global/users/> > All messages sent to this list will be publicly archived and cannot be > deleted > -- For unsubscribe instructions e-mail to: [email protected] Problems? http://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/ Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette List archive: http://listarchives.libreoffice.org/global/users/ All messages sent to this list will be publicly archived and cannot be deleted
