diff --git a/src/common/number/format_number.ts b/src/common/number/format_number.ts index 3834ca1a65..8efd88c373 100644 --- a/src/common/number/format_number.ts +++ b/src/common/number/format_number.ts @@ -77,6 +77,26 @@ export const formatNumber = ( ).format(Number(num)); } } + + if ( + !Number.isNaN(Number(num)) && + num !== "" && + localeOptions?.number_format === NumberFormat.none && + Intl && + (options?.maximumFractionDigits != null || + options?.minimumFractionDigits != null) + ) { + // If NumberFormat is none, just set the digits options for precision and use en-US format without grouping. + return new Intl.NumberFormat( + "en-US", + getDefaultFormatOptions(num, { + useGrouping: false, + maximumFractionDigits: options?.maximumFractionDigits, + minimumFractionDigits: options?.minimumFractionDigits, + }) + ).format(Number(num)); + } + if (typeof num === "string") { return num; } diff --git a/src/panels/lovelace/common/has-changed.ts b/src/panels/lovelace/common/has-changed.ts index 6091362243..36d2cfabda 100644 --- a/src/panels/lovelace/common/has-changed.ts +++ b/src/panels/lovelace/common/has-changed.ts @@ -1,6 +1,6 @@ import { HassEntity } from "home-assistant-js-websocket"; import { PropertyValues } from "lit"; -import { EntityRegistryEntry } from "../../../data/entity_registry"; +import { EntityRegistryDisplayEntry } from "../../../data/entity_registry"; import { HomeAssistant } from "../../../types"; import { processConfigEntities } from "./process-config-entities"; @@ -37,24 +37,19 @@ function compareEntityState( return oldState !== newState; } -function compareEntityEntryOptions( +function compareEntityDisplayEntry( oldHass: HomeAssistant, newHass: HomeAssistant, entityId: string ) { const oldEntry = oldHass.entities[entityId] as - | EntityRegistryEntry + | EntityRegistryDisplayEntry | undefined; const newEntry = newHass.entities[entityId] as - | EntityRegistryEntry + | EntityRegistryDisplayEntry | undefined; - return ( - oldEntry?.options?.sensor?.display_precision !== - newEntry?.options?.sensor?.display_precision || - oldEntry?.options?.sensor?.suggested_display_precision !== - newEntry?.options?.sensor?.suggested_display_precision - ); + return oldEntry?.display_precision !== newEntry?.display_precision; } // Check if config or Entity changed @@ -71,7 +66,7 @@ export function hasConfigOrEntityChanged( return ( compareEntityState(oldHass, newHass, element._config!.entity) || - compareEntityEntryOptions(oldHass, newHass, element._config!.entity) + compareEntityDisplayEntry(oldHass, newHass, element._config!.entity) ); } @@ -96,7 +91,7 @@ export function hasConfigOrEntitiesChanged( return ( compareEntityState(oldHass, newHass, entity.entity) || - compareEntityEntryOptions(oldHass, newHass, entity.entity) + compareEntityDisplayEntry(oldHass, newHass, entity.entity) ); }); } diff --git a/test/common/string/format_number.ts b/test/common/string/format_number.ts index c8c4c135eb..2b62b4b44c 100644 --- a/test/common/string/format_number.ts +++ b/test/common/string/format_number.ts @@ -69,6 +69,33 @@ describe("formatNumber", () => { ); }); + it("Formats number with fraction digits options if number format is none", () => { + assert.strictEqual( + formatNumber( + 1234.5, + { ...defaultLocale, number_format: NumberFormat.none }, + { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + } + ), + "1234.50" + ); + }); + + it("Do not formats number with others options if number format is none", () => { + assert.strictEqual( + formatNumber( + 1234.5, + { ...defaultLocale, number_format: NumberFormat.none }, + { + useGrouping: true, + } + ), + "1234.5" + ); + }); + it("Sets only the maximumFractionDigits format option when none are provided for a number value", () => { assert.deepEqual(getDefaultFormatOptions(1234.5), { maximumFractionDigits: 2,