diff --git a/packages/util/src/float/toU8a.spec.ts b/packages/util/src/float/toU8a.spec.ts index 816999a3b..28b2bbcef 100644 --- a/packages/util/src/float/toU8a.spec.ts +++ b/packages/util/src/float/toU8a.spec.ts @@ -35,6 +35,30 @@ describe('floatToU8a', (): void => { u8aToHex(floatToU8a(Number.NaN, { isLe: true })) ).toEqual('0x0000c07f'); }); + + describe('equivalency', (): void => { + it('encodes number 123.456', (): void => { + expect( + u8aToHex(floatToU8a(123.456)) + ).toEqual('0x79e9f642'); + }); + + it('encodes string 123.456', (): void => { + expect( + u8aToHex(floatToU8a('123.456')) + ).toEqual('0x79e9f642'); + }); + + it('encodes Number 123.456', (): void => { + class Test extends Number { + foo = 'bar'; + } + + expect( + u8aToHex(floatToU8a(new Test(123.456))) + ).toEqual('0x79e9f642'); + }); + }); }); describe('64-bit', (): void => { diff --git a/packages/util/src/float/toU8a.ts b/packages/util/src/float/toU8a.ts index 7aa913f86..e30137dea 100644 --- a/packages/util/src/float/toU8a.ts +++ b/packages/util/src/float/toU8a.ts @@ -1,8 +1,6 @@ // Copyright 2017-2022 @polkadot/util authors & contributors // SPDX-License-Identifier: Apache-2.0 -import { isString } from '../is/string'; - // eslint-disable-next-line @typescript-eslint/ban-types type AnyFloat = number | Number; @@ -16,7 +14,7 @@ interface Options { * @description Converts a float into a U8a representation (While we don't use BE in SCALE * we still allow for either representation, although, as elsewhere, isLe is default) */ -export function floatToU8a (value: string | AnyFloat = '0.0', { bitLength = 32, isLe = true }: Options = {}): Uint8Array { +export function floatToU8a (value: string | AnyFloat = 0.0, { bitLength = 32, isLe = true }: Options = {}): Uint8Array { if (bitLength !== 32 && bitLength !== 64) { throw new Error('Invalid bitLength provided, expected 32 or 64'); } @@ -24,20 +22,10 @@ export function floatToU8a (value: string | AnyFloat = '0.0', { bitLength = 32, const result = new Uint8Array(bitLength / 8); const dv = new DataView(result.buffer, result.byteOffset); - if (value instanceof Number) { - value = value.toString(); - } - - if (isString(value)) { - if (bitLength === 32) { - dv.setFloat32(0, parseFloat(value), isLe); - } else { - dv.setFloat64(0, parseFloat(value), isLe); - } - } else if (bitLength === 32) { - dv.setFloat32(0, value, isLe); + if (bitLength === 32) { + dv.setFloat32(0, Number(value), isLe); } else { - dv.setFloat64(0, value, isLe); + dv.setFloat64(0, Number(value), isLe); } return result;