X-Git-Url: https://git.yukkurigames.com/?p=string-lerp.git;a=blobdiff_plain;f=string-lerp.js;h=46a55bf152769f14c15af203a3cc972ce64791e8;hp=607abc1a4592d6a7aa702818ee6afb0038d232a1;hb=d9344ccd68dbe21eb5af6d0575b5b84b9f8513aa;hpb=0c13ad2908e977aca58e5411e724881abca7228b diff --git a/string-lerp.js b/string-lerp.js index 607abc1..46a55bf 100644 --- a/string-lerp.js +++ b/string-lerp.js @@ -154,7 +154,7 @@ return patch(partial, target); } - var NUMBERS = /(-?\d+(?:\.\d+)?)/g; + var NUMBERS = /(-?\d{1,20}(?:\.\d{1,20})?)/g; function areNumericTwins(source, target) { /** Check if a and b differ only in numerals */ @@ -184,7 +184,6 @@ numerals gives undefined results. */ - // TODO: Try to preserve precision of the original numbers. var sourceParts = source.split(NUMBERS); var targetParts = target.split(NUMBERS); var destParts = targetParts; @@ -194,9 +193,10 @@ var part = nlerp(+sourcePart, +targetPart, amount); var sourcePoint = sourcePart.indexOf("."); var targetPoint = targetPart.indexOf("."); - if (sourcePoint === -1 && targetPoint === -1) - part = Math.round(part); - targetParts[i] = part.toString(); + var point = Math.max( + sourcePoint >= 0 ? (sourcePart.length - 1) - sourcePoint : 0, + targetPoint >= 0 ? (targetPart.length - 1) - targetPoint : 0); + targetParts[i] = part.toFixed(point); } return targetParts.join(""); }