Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9342959
es.number.to-fixed.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
es.number.to-fixed.js
View Options
'use strict'
;
var
$
=
require
(
'../internals/export'
);
var
uncurryThis
=
require
(
'../internals/function-uncurry-this'
);
var
toIntegerOrInfinity
=
require
(
'../internals/to-integer-or-infinity'
);
var
thisNumberValue
=
require
(
'../internals/this-number-value'
);
var
$repeat
=
require
(
'../internals/string-repeat'
);
var
fails
=
require
(
'../internals/fails'
);
var
$RangeError
=
RangeError
;
var
$String
=
String
;
var
floor
=
Math
.
floor
;
var
repeat
=
uncurryThis
(
$repeat
);
var
stringSlice
=
uncurryThis
(
''
.
slice
);
var
nativeToFixed
=
uncurryThis
(
1.0
.
toFixed
);
var
pow
=
function
(
x
,
n
,
acc
)
{
return
n
===
0
?
acc
:
n
%
2
===
1
?
pow
(
x
,
n
-
1
,
acc
*
x
)
:
pow
(
x
*
x
,
n
/
2
,
acc
);
};
var
log
=
function
(
x
)
{
var
n
=
0
;
var
x2
=
x
;
while
(
x2
>=
4096
)
{
n
+=
12
;
x2
/=
4096
;
}
while
(
x2
>=
2
)
{
n
+=
1
;
x2
/=
2
;
}
return
n
;
};
var
multiply
=
function
(
data
,
n
,
c
)
{
var
index
=
-
1
;
var
c2
=
c
;
while
(
++
index
<
6
)
{
c2
+=
n
*
data
[
index
];
data
[
index
]
=
c2
%
1e7
;
c2
=
floor
(
c2
/
1e7
);
}
};
var
divide
=
function
(
data
,
n
)
{
var
index
=
6
;
var
c
=
0
;
while
(
--
index
>=
0
)
{
c
+=
data
[
index
];
data
[
index
]
=
floor
(
c
/
n
);
c
=
(
c
%
n
)
*
1e7
;
}
};
var
dataToString
=
function
(
data
)
{
var
index
=
6
;
var
s
=
''
;
while
(
--
index
>=
0
)
{
if
(
s
!==
''
||
index
===
0
||
data
[
index
]
!==
0
)
{
var
t
=
$String
(
data
[
index
]);
s
=
s
===
''
?
t
:
s
+
repeat
(
'0'
,
7
-
t
.
length
)
+
t
;
}
}
return
s
;
};
var
FORCED
=
fails
(
function
()
{
return
nativeToFixed
(
0.00008
,
3
)
!==
'0.000'
||
nativeToFixed
(
0.9
,
0
)
!==
'1'
||
nativeToFixed
(
1.255
,
2
)
!==
'1.25'
||
nativeToFixed
(
1000000000000000128.0
,
0
)
!==
'1000000000000000128'
;
})
||
!
fails
(
function
()
{
// V8 ~ Android 4.3-
nativeToFixed
({});
});
// `Number.prototype.toFixed` method
// https://tc39.es/ecma262/#sec-number.prototype.tofixed
$
({
target
:
'Number'
,
proto
:
true
,
forced
:
FORCED
},
{
toFixed
:
function
toFixed
(
fractionDigits
)
{
var
number
=
thisNumberValue
(
this
);
var
fractDigits
=
toIntegerOrInfinity
(
fractionDigits
);
var
data
=
[
0
,
0
,
0
,
0
,
0
,
0
];
var
sign
=
''
;
var
result
=
'0'
;
var
e
,
z
,
j
,
k
;
// TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation
if
(
fractDigits
<
0
||
fractDigits
>
20
)
throw
$RangeError
(
'Incorrect fraction digits'
);
// eslint-disable-next-line no-self-compare -- NaN check
if
(
number
!=
number
)
return
'NaN'
;
if
(
number
<=
-
1e21
||
number
>=
1e21
)
return
$String
(
number
);
if
(
number
<
0
)
{
sign
=
'-'
;
number
=
-
number
;
}
if
(
number
>
1e-21
)
{
e
=
log
(
number
*
pow
(
2
,
69
,
1
))
-
69
;
z
=
e
<
0
?
number
*
pow
(
2
,
-
e
,
1
)
:
number
/
pow
(
2
,
e
,
1
);
z
*=
0x10000000000000
;
e
=
52
-
e
;
if
(
e
>
0
)
{
multiply
(
data
,
0
,
z
);
j
=
fractDigits
;
while
(
j
>=
7
)
{
multiply
(
data
,
1e7
,
0
);
j
-=
7
;
}
multiply
(
data
,
pow
(
10
,
j
,
1
),
0
);
j
=
e
-
1
;
while
(
j
>=
23
)
{
divide
(
data
,
1
<<
23
);
j
-=
23
;
}
divide
(
data
,
1
<<
j
);
multiply
(
data
,
1
,
1
);
divide
(
data
,
2
);
result
=
dataToString
(
data
);
}
else
{
multiply
(
data
,
0
,
z
);
multiply
(
data
,
1
<<
-
e
,
0
);
result
=
dataToString
(
data
)
+
repeat
(
'0'
,
fractDigits
);
}
}
if
(
fractDigits
>
0
)
{
k
=
result
.
length
;
result
=
sign
+
(
k
<=
fractDigits
?
'0.'
+
repeat
(
'0'
,
fractDigits
-
k
)
+
result
:
stringSlice
(
result
,
0
,
k
-
fractDigits
)
+
'.'
+
stringSlice
(
result
,
k
-
fractDigits
));
}
else
{
result
=
sign
+
result
;
}
return
result
;
}
});
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Jul 4, 1:08 PM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3368350
Attached To
rDWAPPS Web applications
Event Timeline
Log In to Comment