File tree Expand file tree Collapse file tree 4 files changed +108
-1
lines changed
packages/shared/useToNumber Expand file tree Collapse file tree 4 files changed +108
-1
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ category : Utilities
3
+ ---
4
+
5
+ # useToNumber
6
+
7
+ Reactively convert a string ref to number.
8
+
9
+ ## Usage
10
+
11
+ ``` ts
12
+ import { useToNumber } from ' @vueuse/core'
13
+
14
+ const str = ref (' 123' )
15
+ const number = useToNumber (str )
16
+
17
+ number .value // 123
18
+ ```
Original file line number Diff line number Diff line change
1
+ import { ref } from 'vue-demi'
2
+ import { useToNumber } from '.'
3
+
4
+ describe ( 'useToNumber' , ( ) => {
5
+ it ( 'default' , ( ) => {
6
+ const value = ref < string | number > ( '123.345' )
7
+ const float = useToNumber ( value )
8
+ const int = useToNumber ( value , { method : 'parseInt' } )
9
+
10
+ expect ( float . value ) . toBe ( 123.345 )
11
+ expect ( int . value ) . toBe ( 123 )
12
+
13
+ value . value = 'hi'
14
+
15
+ expect ( float . value ) . toBe ( NaN )
16
+ expect ( int . value ) . toBe ( NaN )
17
+
18
+ value . value = 123.4
19
+
20
+ expect ( float . value ) . toBe ( 123.4 )
21
+ expect ( int . value ) . toBe ( 123.4 )
22
+
23
+ value . value = '-43.53'
24
+
25
+ expect ( float . value ) . toBe ( - 43.53 )
26
+ expect ( int . value ) . toBe ( - 43 )
27
+ } )
28
+
29
+ it ( 'radix' , ( ) => {
30
+ const value = ref < string | number > ( '0xFA' )
31
+ const int = useToNumber ( value , { method : 'parseInt' , radix : 16 } )
32
+
33
+ expect ( int . value ) . toBe ( 250 )
34
+ } )
35
+
36
+ it ( 'nanToZero' , ( ) => {
37
+ const value = ref < string | number > ( 'Hi' )
38
+ const float = useToNumber ( value , { nanToZero : true } )
39
+ expect ( float . value ) . toBe ( 0 )
40
+ } )
41
+ } )
Original file line number Diff line number Diff line change
1
+ import type { ComputedRef } from 'vue-demi'
2
+ import { computed } from 'vue-demi'
3
+ import { resolveUnref } from '../resolveUnref'
4
+ import type { MaybeComputedRef } from '../utils'
5
+
6
+ export interface UseToNumberOptions {
7
+ /**
8
+ * Method to use to convert the value to a number.
9
+ *
10
+ * @default 'parseFloat'
11
+ */
12
+ method ?: 'parseFloat' | 'parseInt'
13
+
14
+ /**
15
+ * The base in mathematical numeral systems passed to `parseInt`.
16
+ * Only works with `method: 'parseInt'`
17
+ */
18
+ radix ?: number
19
+
20
+ /**
21
+ * Replace NaN with zero
22
+ *
23
+ * @default false
24
+ */
25
+ nanToZero ?: boolean
26
+ }
27
+
28
+ /**
29
+ * Computed reactive object.
30
+ */
31
+ export function useToNumber (
32
+ value : MaybeComputedRef < number | string > ,
33
+ options : UseToNumberOptions = { } ,
34
+ ) : ComputedRef < number > {
35
+ const {
36
+ method = 'parseFloat' ,
37
+ radix,
38
+ nanToZero,
39
+ } = options
40
+
41
+ return computed ( ( ) => {
42
+ let resolved = resolveUnref ( value )
43
+ if ( typeof resolved === 'string' )
44
+ resolved = Number [ method ] ( resolved , radix )
45
+ if ( nanToZero && isNaN ( resolved ) )
46
+ resolved = 0
47
+ return resolved
48
+ } )
49
+ }
Original file line number Diff line number Diff line change 42
42
],
43
43
"exclude" : [
44
44
" node_modules" ,
45
- " **/**/*.stories.tsx" ,
46
45
" **/**/*.md" ,
47
46
" **/dist" ,
48
47
" packages/.test" ,
You can’t perform that action at this time.
0 commit comments