diff --git a/packages/math/index.ts b/packages/math/index.ts index 555af17277a..ea67a485588 100644 --- a/packages/math/index.ts +++ b/packages/math/index.ts @@ -14,3 +14,4 @@ export * from './useMin' export * from './useProjection' export * from './useRound' export * from './useSum' +export * from './useTrunc' diff --git a/packages/math/useTrunc/index.md b/packages/math/useTrunc/index.md new file mode 100644 index 00000000000..56bb14154fb --- /dev/null +++ b/packages/math/useTrunc/index.md @@ -0,0 +1,18 @@ +--- +category: '@Math' +--- + +# useTrunc + +Reactive `Math.trunc`. + +## Usage + +```ts +import { useTrunc } from '@vueuse/math' + +const value1 = ref(0.95) +const value2 = ref(-2.34) +const result1 = useTrunc(value1) // 0 +const result2 = useTrunc(value2) // -2 +``` diff --git a/packages/math/useTrunc/index.test.ts b/packages/math/useTrunc/index.test.ts new file mode 100644 index 00000000000..8802461e3ba --- /dev/null +++ b/packages/math/useTrunc/index.test.ts @@ -0,0 +1,44 @@ +import { ref } from 'vue-demi' +import { useTrunc } from '.' + +// Returns: +// 0 -> 0 +// -0 -> -0 +// 0.2 -> 0 +// -0.2 -> -0 +// 0.7 -> 0 +// -0.7 -> -0 +// Infinity -> Infinity +// -Infinity -> -Infinity +// NaN -> NaN +// null -> 0 + +describe('useTrunk', () => { + it('should be defined', () => { + expect(useTrunc).toBeDefined() + }) + it('should work', () => { + const base = ref(1.95) + const result = useTrunc(base) + expect(result.value).toBe(1) + base.value = -7.004 + expect(result.value).toBe(-7) + + base.value = 0 + expect(result.value).toBe(0) + base.value = -0 + expect(result.value).toBe(-0) + + base.value = 0.2 + expect(result.value).toBe(0) + base.value = -0.2 + expect(result.value).toBe(-0) + + base.value = Infinity + expect(result.value).toBe(Infinity) + base.value = -Infinity + expect(result.value).toBe(-Infinity) + base.value = NaN + expect(result.value).toBe(NaN) + }) +}) diff --git a/packages/math/useTrunc/index.ts b/packages/math/useTrunc/index.ts new file mode 100644 index 00000000000..a910c518fa6 --- /dev/null +++ b/packages/math/useTrunc/index.ts @@ -0,0 +1,13 @@ +import type { ComputedRef } from 'vue-demi' +import { computed } from 'vue-demi' +import type { MaybeComputedRef } from '@vueuse/shared' +import { resolveUnref } from '@vueuse/shared' + +/** + * Reactive `Math.trunc`. + * + * @see https://vueuse.org/useTrunc + */ +export function useTrunc(value: MaybeComputedRef): ComputedRef { + return computed(() => Math.trunc(resolveUnref(value))) +}