Skip to content

Commit

Permalink
修复 ceil,round/floor 精度不正确问题
Browse files Browse the repository at this point in the history
  • Loading branch information
xuliangzhan committed Jan 25, 2021
1 parent a7904ee commit 5fa865d
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 33 deletions.
2 changes: 1 addition & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
}
})();</script><link href=/xe-utils/static/css/app.86ea88b0.css rel=preload as=style><link href=/xe-utils/static/css/chunk-vendors.42851454.css rel=preload as=style><link href=/xe-utils/static/js/app.d4b135be.js rel=preload as=script><link href=/xe-utils/static/js/chunk-vendors.4629d054.js rel=preload as=script><link href=/xe-utils/static/css/chunk-vendors.42851454.css rel=stylesheet><link href=/xe-utils/static/css/app.86ea88b0.css rel=stylesheet></head><body><noscript><strong>We're sorry but xe-utils doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=https://cdn.jsdelivr.net/npm/xe-utils></script><script src=https://cdn.jsdelivr.net/npm/xe-ajax></script><script src=https://cdn.jsdelivr.net/npm/xe-clipboard></script><script src=/xe-utils/static/js/chunk-vendors.4629d054.js></script><script src=/xe-utils/static/js/app.d4b135be.js></script></body></html>
})();</script><link href=/xe-utils/static/css/app.052a8e09.css rel=preload as=style><link href=/xe-utils/static/css/chunk-vendors.42851454.css rel=preload as=style><link href=/xe-utils/static/js/app.6c7a0889.js rel=preload as=script><link href=/xe-utils/static/js/chunk-vendors.8cc45737.js rel=preload as=script><link href=/xe-utils/static/css/chunk-vendors.42851454.css rel=stylesheet><link href=/xe-utils/static/css/app.052a8e09.css rel=stylesheet></head><body><noscript><strong>We're sorry but xe-utils doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=https://cdn.jsdelivr.net/npm/xe-utils></script><script src=https://cdn.jsdelivr.net/npm/xe-ajax></script><script src=https://cdn.jsdelivr.net/npm/xe-clipboard></script><script src=/xe-utils/static/js/chunk-vendors.8cc45737.js></script><script src=/xe-utils/static/js/app.6c7a0889.js></script></body></html>

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions docs/static/js/app.6c7a0889.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion docs/static/js/app.d4b135be.js

This file was deleted.

12 changes: 0 additions & 12 deletions docs/static/js/chunk-vendors.4629d054.js

This file was deleted.

12 changes: 12 additions & 0 deletions docs/static/js/chunk-vendors.8cc45737.js

Large diffs are not rendered by default.

14 changes: 8 additions & 6 deletions func/helperCreateMathNumber.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,29 @@ var toNumber = require('./toNumber')
var toNumberString = require('./toNumberString')

function helperCreateMathNumber(name) {
var isCeil = name === 'ceil'
return function (num, digits) {
var numRest = toNumber(num)
var rest = numRest
if (numRest) {
digits = digits >> 0
var numStr = toNumberString(numRest)
var nums = numStr.split('.')
var intStr = nums[0]
var floatStr = nums[1] || ''
var fStr = floatStr.substring(0, digits + 1)
var rest = intStr + (fStr ? ('.' + fStr) : '')
var subRest = intStr + (fStr ? ('.' + fStr) : '')
if (digits >= floatStr.length) {
return toNumber(rest)
return toNumber(subRest)
}
subRest = numRest
if (digits > 0) {
var ratio = Math.pow(10, digits)
return Math[name]((isCeil ? numRest : rest) * ratio) / ratio
rest = Math[name](subRest * ratio) / ratio
} else {
rest = Math[name](subRest)
}
return Math[name](rest)
}
return numRest
return rest
}
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "xe-utils",
"version": "3.1.5",
"version": "3.1.6",
"description": "JavaScript 函数库、工具类",
"main": "index.js",
"unpkg": "dist/xe-utils.umd.min.js",
Expand Down
16 changes: 15 additions & 1 deletion src/views/API.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2737,7 +2737,21 @@ export default {
codes: [
`
XEUtils.ceil(123.455, 2) // 123.45
XEUtils.ceil(123.452, 2) // 123.45
XEUtils.ceil(123.452, 2) // 123.42
`
]
},
{
name: 'toFixed',
args: 'num, digits',
title: '将数值四舍五入,并格式化为字符串',
desc: '',
params: [],
codes: [
`
XEUtils.toFixed(123.455, 2) // 123.45
XEUtils.toFixed(123.452, 2) // 123.45
XEUtils.toFixed(123.452, 4) // 123.4520
`
]
},
Expand Down
119 changes: 109 additions & 10 deletions test/number.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@ describe('Number functions', () => {
expect(
XEUtils.round(123)
).toEqual(123)
expect(
XEUtils.round(-123)
).toEqual(-123)
expect(
XEUtils.round('1.00', 0)
).toEqual(1)
Expand All @@ -233,6 +236,9 @@ describe('Number functions', () => {
expect(
XEUtils.round(0.999, 4)
).toEqual(0.999)
expect(
XEUtils.round(-0.999, 4)
).toEqual(-0.999)
expect(
XEUtils.round(1.33, 3)
).toEqual(1.33)
Expand All @@ -243,17 +249,38 @@ describe('Number functions', () => {
XEUtils.round(33.3, 2)
).toEqual(33.3)
expect(
XEUtils.round(4.555, 2)
).toEqual(4.56)
XEUtils.round(52.636, 2)
).toEqual(52.64)
expect(
XEUtils.round(52.635, 2)
).toEqual(52.64)
expect(
XEUtils.round(52.634, 2)
).toEqual(52.63)
expect(
XEUtils.round(-52.636, 2)
).toEqual(-52.64)
expect(
XEUtils.round(-52.635, 2)
).toEqual(-52.63)
expect(
XEUtils.round(-52.634, 2)
).toEqual(-52.63)
expect(
XEUtils.round(2222.22, 2)
).toEqual(2222.22)
expect(
XEUtils.round(3333.99, 2)
).toEqual(3333.99)
expect(
XEUtils.round(-3333.99, 2)
).toEqual(-3333.99)
expect(
XEUtils.round(3.00099, 2)
).toEqual(3)
expect(
XEUtils.round(-3.00099, 2)
).toEqual(-3)
expect(
XEUtils.round(12.3999, 2)
).toEqual(12.4)
Expand Down Expand Up @@ -335,6 +362,21 @@ describe('Number functions', () => {
expect(
XEUtils.ceil(123)
).toEqual(123)
expect(
XEUtils.ceil(0.0001)
).toEqual(1)
expect(
XEUtils.ceil(0.003, 0)
).toEqual(1)
expect(
XEUtils.ceil(-0.003)
).toEqual(-0)
expect(
XEUtils.ceil(-0.002)
).toEqual(-0)
expect(
XEUtils.ceil(-0.003, 1)
).toEqual(-0)
expect(
XEUtils.ceil('1.00', 0)
).toEqual(1)
Expand Down Expand Up @@ -368,6 +410,9 @@ describe('Number functions', () => {
expect(
XEUtils.ceil(33, 2)
).toEqual(33)
expect(
XEUtils.ceil(-33, 2)
).toEqual(-33)
expect(
XEUtils.ceil(33.3, 2)
).toEqual(33.3)
Expand All @@ -377,6 +422,9 @@ describe('Number functions', () => {
expect(
XEUtils.ceil(52.635, 2)
).toEqual(52.64)
expect(
XEUtils.ceil(-52.635, 2)
).toEqual(-52.63)
expect(
XEUtils.ceil(52.63001, 2)
).toEqual(52.64)
Expand All @@ -389,6 +437,9 @@ describe('Number functions', () => {
expect(
XEUtils.ceil(3333.0000099, 3)
).toEqual(3333.001)
expect(
XEUtils.ceil(-3333.0000099, 3)
).toEqual(-3333)
expect(
XEUtils.ceil(3333.0009, 5)
).toEqual(3333.0009)
Expand All @@ -412,19 +463,19 @@ describe('Number functions', () => {
).toEqual(1452349847.3979)
expect(
XEUtils.ceil(1e-8)
).toEqual(0)
).toEqual(1)
expect(
XEUtils.ceil(1e-8, 8)
).toEqual(0.00000001)
).toEqual(1e-8)
expect(
XEUtils.ceil('9e-8', 6)
).toEqual(0.000001)
expect(
XEUtils.ceil(9e-8, 8)
).toEqual(0.00000009)
expect(
XEUtils.ceil(9e-8, 8)
).toEqual(9e-8)
XEUtils.ceil(9e-8, 6)
).toEqual(0.000001)
expect(
XEUtils.ceil('9e-8', 12)
).toEqual(9e-8)
Expand Down Expand Up @@ -500,12 +551,18 @@ describe('Number functions', () => {
expect(
XEUtils.floor(52.635, 2)
).toEqual(52.63)
expect(
XEUtils.floor(-52.635, 2)
).toEqual(-52.64)
expect(
XEUtils.floor(0.999, 4)
).toEqual(0.999)
expect(
XEUtils.floor(1.33, 3)
).toEqual(1.33)
expect(
XEUtils.floor(-1.33, 3)
).toEqual(-1.33)
expect(
XEUtils.floor(33, 2)
).toEqual(33)
Expand All @@ -518,6 +575,15 @@ describe('Number functions', () => {
expect(
XEUtils.floor(3333.99, 2)
).toEqual(3333.99)
expect(
XEUtils.floor(-3333.99, 2)
).toEqual(-3333.99)
expect(
XEUtils.floor(33.00099, 2)
).toEqual(33)
expect(
XEUtils.floor(-33.00099, 2)
).toEqual(-33.01)
expect(
XEUtils.floor(12.3999, 2)
).toEqual(12.39)
Expand Down Expand Up @@ -547,13 +613,13 @@ describe('Number functions', () => {
).toEqual(9e-8)
expect(
XEUtils.floor(-9e-12)
).toEqual(-0)
).toEqual(-1)
expect(
XEUtils.floor('-9e-8', 8)
).toEqual(-9e-8)
expect(
XEUtils.floor(-923e-8, 4)
).toEqual(-0)
).toEqual(-0.0001)
expect(
XEUtils.floor('-923e-8', 10)
).toEqual(-0.00000923)
Expand Down Expand Up @@ -605,6 +671,12 @@ describe('Number functions', () => {
expect(
XEUtils.toFixed(0.01, 4)
).toEqual('0.0100')
expect(
XEUtils.toFixed(0.000001, 4)
).toEqual('0.0000')
expect(
XEUtils.toFixed(-0.000001, 4)
).toEqual('0.0000')
expect(
XEUtils.toFixed(0.6)
).toEqual('1')
Expand All @@ -620,6 +692,9 @@ describe('Number functions', () => {
expect(
XEUtils.toFixed(9999.77, 2)
).toEqual('9999.77')
expect(
XEUtils.toFixed(-9999.77, 1)
).toEqual('-9999.8')
expect(
XEUtils.toFixed(33.777, 2)
).toEqual('33.78')
Expand All @@ -629,21 +704,45 @@ describe('Number functions', () => {
expect(
XEUtils.toFixed(0.01, 4)
).toEqual((0.01).toFixed(4))
expect(
XEUtils.toFixed(-0.01, 4)
).toEqual((-0.01).toFixed(4))
expect(
XEUtils.toFixed(0.065, 2)
).toEqual((0.065).toFixed(2))
expect(
XEUtils.toFixed(0.065, 3)
).toEqual((0.065).toFixed(3))
expect(
XEUtils.toFixed(0.065, 4)
).toEqual((0.065).toFixed(4))
expect(
XEUtils.toFixed(-0.065, 2)
).toEqual('-0.06')
expect(
XEUtils.toFixed(-0.065, 3)
).toEqual('-0.065')
expect(
XEUtils.toFixed(-0.065, 4)
).toEqual('-0.0650')
expect(
XEUtils.toFixed('0.0001', 3)
).toEqual((0.0001).toFixed(3))
expect(
XEUtils.toFixed('0.0005', 3)
).toEqual((0.0005).toFixed(3))
expect(
XEUtils.toFixed('2222.22', 2)
XEUtils.toFixed('2222.222', 2)
).toEqual('2222.22')
expect(
XEUtils.toFixed(2222.22, 2)
XEUtils.toFixed('-2222.222', 2)
).toEqual('-2222.22')
expect(
XEUtils.toFixed(2222.222, 2)
).toEqual('2222.22')
expect(
XEUtils.toFixed(-2222.222, 2)
).toEqual('-2222.22')
expect(
XEUtils.toFixed(-0.123, 2)
).toEqual((-0.123).toFixed(2))
Expand Down

0 comments on commit 5fa865d

Please sign in to comment.