Conversion from Long to exact string representation. arithmetic
authorMartin Soch <Martin.Soch@oracle.com>
Wed, 30 Jan 2013 09:27:53 +0100
brancharithmetic
changeset 6079e4d0019a9eb
parent 594 035fcbd7a33c
child 615 e3f671b50e93
Conversion from Long to exact string representation.
emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js
     1.1 --- a/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js	Mon Jan 28 00:15:38 2013 +0100
     1.2 +++ b/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_Number.js	Wed Jan 30 09:27:53 2013 +0100
     1.3 @@ -27,7 +27,34 @@
     1.4  Number.prototype.toLong = function() {
     1.5      var hi = (this > 0xFFFFFFFF) ? (Math.floor(this / 0xFFFFFFFF)) | 0 : 0;
     1.6      return hi.next32(this % 0xFFFFFFFF);
     1.7 -}
     1.8 +};
     1.9 +
    1.10 +Number.prototype.toExactString = function() {
    1.11 +    if (this.hi) {
    1.12 +        var res = 0;
    1.13 +        var a = [ 6,9,2,7,6,9,4,9,2,4 ];
    1.14 +        var s = '';
    1.15 +        var digit;
    1.16 +        var hi = this.hi;
    1.17 +        var low = this;
    1.18 +        for (var i = 0; i < a.length; i++) {
    1.19 +            res += hi * a[i];
    1.20 +            var low_digit = low % 10;
    1.21 +            digit = (res % 10) + low_digit;
    1.22 +
    1.23 +            low = Math.floor(low / 10);
    1.24 +            res = Math.floor(res / 10);
    1.25 +
    1.26 +            if (digit >= 10) {
    1.27 +                digit -= 10;
    1.28 +                res++;
    1.29 +            }
    1.30 +            s = String(digit).concat(s);
    1.31 +        }
    1.32 +        return String(res).concat(s);
    1.33 +    }
    1.34 +    return String(this);
    1.35 +};
    1.36  
    1.37  Number.prototype.add64 = function(x) {
    1.38      var low = this + x;