It's understandable to have a different interpretation of the modulo operator: different languages implement it differently, and Perl's implementation is not the most straightforward. If you come from the spreadsheet world, Excel's MOD() and VBA's Mod both work with floating point. C's % works purely with integers, or fmod() for floating point. Perl's %, OTOH, has a bunch of conditionals to determine integer vs. floating-point context. I'll expound on them slightly, in case it might help JBCookin:
- Binary "%" is the modulo operator, which computes the division remainder of its first argument with respect to its second argument.:
⇒ if someone just read the first line of the paragraph, there is no mention of integer vs float.
- Given integer operands $m and $n: If $n is positive, then $m % $n is $m minus the largest multiple of $n less than or equal to $m . If $n is negative, then $m % $n is $m minus the smallest multiple of $n that is not less than $m (that is, the result will be less than or equal to zero). :
⇒ explicitly integer condition
- If the operands $m and $n are floating point values and the absolute value of $n (that is abs($n)) is less than (UV_MAX + 1) , only the integer portion of $m and $n will be used in the operation (Note: here UV_MAX means the maximum of the unsigned integer type).:
⇒ so when the divisor happens to fit under some maximum integer, then both $m and $n are truncated to integers. (I believe that perl -V:intsize, which shows the number of bytes in an integer, will also be the number of bytes in an unsigned integer... but it might use perl -V:ivsize instead... someone with more perlguts knowledge than me can clarify)
- If the absolute value of the right operand (abs($n)) is greater than or equal to (UV_MAX + 1) , "%" computes the floating-point remainder $r in the equation ($r = $m - $i*$n) where $i is a certain integer that makes $r have the same sign as the right operand $n (not as the left operand $m like C function fmod() ) and the absolute value less than that of $n .:
⇒ so only with a very large divisor $n would use full floating point modulo.
JBCookin, I hope this helps you understand better... And hippo's solution should give you the fractional component you need.
update: strike the invalid interpretation; thanks syphilis++ for confirmation of the alternate
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.