@@ -261,12 +261,12 @@ end
261261
262262-- Convert int to 4 bytes string
263263function intToBytes (int )
264- return string.char (
265- bit .band (int , 0xFF ),
266- bit .band (bit .rshift (int , 8 ), 0xFF ),
267- bit .band (bit .rshift (int , 16 ), 0xFF ),
268- bit .band (bit .rshift (int , 24 ), 0xFF )
269- )
264+ return string.char (
265+ bit .band (int , 0xFF ),
266+ bit .band (bit .rshift (int , 8 ), 0xFF ),
267+ bit .band (bit .rshift (int , 16 ), 0xFF ),
268+ bit .band (bit .rshift (int , 24 ), 0xFF )
269+ )
270270end
271271
272272do
@@ -627,7 +627,7 @@ function naturalSortCompare(a, b)
627627 end
628628end
629629
630- -- Rounds a number to the nearest <dec> decimal places
630+ -- Rounds a number to the nearest <dec> decimal places 2.5->3 and -2.5->-2
631631function round (val , dec )
632632 if dec then
633633 return m_floor (val * 10 ^ dec + 0.5 ) / 10 ^ dec
@@ -651,56 +651,58 @@ end
651651
652652-- Symmetric round with precision: Rounds towards zero to <dec> decimal places.
653653function roundSymmetric (val , dec )
654- if dec then
655- local factor = 10 ^ dec
656- if val >= 0 then
657- return m_floor (val * factor + 0.5 ) / factor
658- else
659- return m_ceil (val * factor - 0.5 ) / factor
660- end
661- else
662- if val >= 0 then
663- return m_floor (val + 0.5 )
664- else
665- return m_ceil (val - 0.5 )
666- end
667- end
654+ if dec then
655+ local factor = 10 ^ dec
656+ if val >= 0 then
657+ return m_floor (val * factor + 0.5 ) / factor
658+ else
659+ return m_ceil (val * factor - 0.5 ) / factor
660+ end
661+ else
662+ if val >= 0 then
663+ return m_floor (val + 0.5 )
664+ else
665+ return m_ceil (val - 0.5 )
666+ end
667+ end
668+ end
669+
670+ -- Use rounding formula for postive numbers always used in corrupted unique roll ranges this is an incorrect way to round numbers.
671+ function alwaysPositveRound (val , dec )
672+ if dec then
673+ local factor = 10 ^ dec
674+ return m_floor (val * factor + 0.5 ) / factor
675+ else
676+ return m_floor (val + 0.5 )
677+ end
668678end
669679
670680-- Symmetric floor with precision: Rounds down towards zero to <dec> decimal places.
671681function floorSymmetric (val , dec )
672- if dec then
673- local factor = 10 ^ dec
674- if val >= 0 then
675- return m_floor (val * factor ) / factor
676- else
677- return m_ceil (val * factor ) / factor
678- end
679- else
680- if val >= 0 then
681- return m_floor (val )
682- else
683- return m_ceil (val )
684- end
685- end
686- end
687-
688- -- Symmetric ceil with precision: Rounds up towards zero to <dec> decimal places.
682+ if dec then
683+ local factor = 10 ^ dec
684+ return select (1 , math.modf (val * factor )) / factor
685+ else
686+ return select (1 , math.modf (val ))
687+ end
688+ end
689+
690+ -- Symmetric ceil with precision: Rounds up away from zero to <dec> decimal places.
689691function ceilSymmetric (val , dec )
690- if dec then
691- local factor = 10 ^ dec
692- if val >= 0 then
693- return m_ceil (val * factor ) / factor
694- else
695- return m_floor (val * factor ) / factor
696- end
697- else
698- if val >= 0 then
699- return m_ceil (val )
700- else
701- return m_floor (val )
702- end
703- end
692+ if dec then
693+ local factor = 10 ^ dec
694+ if val >= 0 then
695+ return m_ceil (val * factor ) / factor
696+ else
697+ return m_floor (val * factor ) / factor
698+ end
699+ else
700+ if val >= 0 then
701+ return m_ceil (val )
702+ else
703+ return m_floor (val )
704+ end
705+ end
704706end
705707
706708--- @param n number
0 commit comments