浏览代码

Merge branch 'master' of gitlab.com:bebeco/AutoMate

Tomislav Cvetic 8 年之前
父节点
当前提交
713041cba6
共有 3 个文件被更改,包括 39 次插入24 次删除
  1. 1 0
      package.json
  2. 28 18
      src/helpers.js
  3. 10 6
      src/helpers.test.js

+ 1 - 0
package.json

@@ -16,6 +16,7 @@
     "redux-saga": "0.14.3",
     "request-promise": "4.2.0",
     "reselect": "2.5.4",
+    "sinon": "2.1.0",
     "style-loader": "0.13.2",
     "stylus-loader": "3.0.1",
     "stylus-normalize": "3.0.3"

+ 28 - 18
src/helpers.js

@@ -1,27 +1,37 @@
 /** Parse and print engineering notation */
 const prefixMap = {
-  'y': 1e-24,
-  'z': 1e-21,
-  'a': 1e-18,
-  'f': 1e-15,
-  'p': 1e-12,
-  'n': 1e-9,
-  'u': 1e-6,
-  'm': 1e-3,
-  'k': 1e3,
-  'M': 1e6,
-  'G': 1e9,
-  'T': 1e12,
-  'P': 1e15,
-  'E': 1e18,
-  'Z': 1e21,
-  'Y': 1e24
+  1e-24: 'y',
+  1e-21: 'z',
+  1e-18: 'a',
+  1e-15: 'f',
+  1e-12: 'p',
+  1e-9: 'n',
+  1e-6: 'u',
+  1e-3: 'm',
+  1: '',
+  1e3: 'k',
+  1e6: 'M',
+  1e9: 'G',
+  1e12: 'T',
+  1e15: 'P',
+  1e18: 'E',
+  1e21: 'Z',
+  1e24: 'Y'
 }
 const REGEX_ENG = /^([+-])?\s*(\d*\.?\d+|\d+\.?\d*)?([yzafpnumkMGTPTEZY]|e[+-]?\d+)?$/
 
 export function printEng (number) {
-  const base = Math.floor(Math.floor(Math.log10(Math.fabs(number)) / 3))
-  return base
+  const factor = Object.keys(prefixMap).find((key) => {
+    const ratio = Math.abs(number / key)
+    return (ratio >= 1) && (ratio < 1000)
+  })
+  if (typeof factor !== 'undefined') {
+    return (number / factor).toFixed(3).replace(/0+$/, '') + prefixMap[factor]
+  } else {
+    const base = Math.floor(Math.floor(Math.log10(Math.abs(number)) / 3))
+    const value = (number / Math.pow(10, 3 * base)).toFixed(3).replace(/0+$/, '')
+    return `${value}e${(3 * base).toFixed()}`
+  }
 }
 
 export function parseEng (string) {

+ 10 - 6
src/helpers.test.js

@@ -3,12 +3,16 @@ import * as helpers from './helpers'
 describe('Engineering notation', () => {
   describe('Print numbers', () => {
     it('prints numbers in engineering notation', () => {
-      // expect(helpers.printEng(1.2)).toBe('1.2')
-      // expect(helpers.printEng(-1.2)).toBe('-1.2')
-      // expect(helpers.printEng(12345678901234.56789)).toBe('12.347T')
-      // expect(helpers.printEng(-12345678901234.56789)).toBe('-12.347T')
-      // expect(helpers.printEng(0.000000000012345678)).toBe('12.347p')
-      // expect(helpers.printEng(-0.000000000012345678)).toBe('-12.347p')
+      expect(helpers.printEng(1.2)).toBe('1.2')
+      expect(helpers.printEng(-1.2)).toBe('-1.2')
+      expect(helpers.printEng(12345678901234.56789)).toBe('12.346T')
+      expect(helpers.printEng(-12345678901234.56789)).toBe('-12.346T')
+      expect(helpers.printEng(0.00000000012345678)).toBe('123.457p')
+      expect(helpers.printEng(-0.00000000012345678)).toBe('-123.457p')
+      expect(helpers.printEng(1234567890123456789012345678.90123)).toBe('1.235e27')
+      expect(helpers.printEng(-1234567890123456789012345678.90123)).toBe('-1.235e27')
+      expect(helpers.printEng(0.000000000000000000000000012345678)).toBe('12.346e-27')
+      expect(helpers.printEng(-0.000000000000000000000000012345678)).toBe('-12.346e-27')
     })
   })
   describe('Parse numbers', () => {