Qualunque sia la struttura che si sceglie, e la vostra scelta può ben essere indicato dal vostro implementazione preferita (??? OO funzionale tabella DBMS) Penso che è necessario per identificare la struttura delle unità stesse.
Ad esempio una misura di 1000 km/h ha diversi componenti:
- una grandezza scalare, 1000;
- un prefisso, in questo caso kilo; e
- una dimensione, in questo caso L.T^(- 1), cioè, la lunghezza divisa per tempo.
tuo modellazione delle misure con le unità ha bisogno di catturare almeno questa complessità.
Come è già stato suggerito, si dovrebbe stabilire ciò che il set di base di unità che si intende utilizzare sono, e le unità SI di base suggeriscono immediatamente se stessi. Le strutture dei dati per le unità di modellazione verranno quindi definite in termini di tali unità di base. Si potrebbe quindi definire una tabella (pensando RDBMS qui, ma facilmente traducibile in l'implementazione preferita) con le voci quali:
unit name dimension conversion to base
foot Length 0.3048
gallon(UK) Length^3 4.546092 x 10^(-3)
kilowatt-hour Mass.Length^2.Time^(-2) 3.6 x 10^6
e così via. Avrete anche bisogno di una tabella di tradurre i prefissi (kilo-, nano-, mega-, mibi- ecc) in fattori moltiplicatori, e un tavolo di unità di base per ciascuna delle dimensioni (cioè metro è l'unità di base per la lunghezza, la seconda per il tempo, ecc.). Dovrete anche fare i conti con le unità quali feet
che sono semplicemente sinonimi di altre unità.
Lo scopo della dimensione è, ovviamente, quello di garantire che le conversioni e altre operazioni (come l'aggiunta di 2 feet
a 3.5 metres
) siano commisurate.
E, per ulteriori letture, suggerisco this book by Cardarelli.
EDIT in risposta ai commenti ...
sto cercando di girare lontano dal suggerire soluzioni (specifiche di implementazione) quindi mi Waffle un po 'di più. Le unità composte, come i kilowattora, rappresentano un problema. Un approccio potrebbe essere quello di etichettare le misurazioni con più quote espressioni, come ad esempio kilowatt
e hour
, e una regola per combinare loro, in questo caso multiplication
Ho potuto vedere questo diventando piuttosto peloso abbastanza rapidamente. Potrebbe essere meglio per limitare l'insieme valido di unità da quelli più comuni nel dominio dell'applicazione.
Per quanto riguarda le misurazioni in unità miste, lo scopo di definire la dimensione di un'unità è di fornire alcuni mezzi per garantire che solo le operazioni sensibili possano essere applicate alle misurazioni con unità. Quindi, è ragionevole aggiungere due lunghezze (L + L) insieme, ma non una lunghezza (L) e un volume (L^3). D'altra parte è ragionevole dividere un volume per una lunghezza (per ottenere un'area (L^2)). Ed è una specie di fino l'applicazione per determinare se le unità strani come ad esempio chilowattora per metro quadrato sono validi.
Infine, il libro I link enumera tutte le possibilità, immagino che le applicazioni più sensate con le unità implementeranno solo una selezione.
Avete bisogno di qualcosa da integrare? Se hai solo bisogno dei dati, guarda 'units (1)' – Daenyth
Ha bisogno di integrarsi in un'altra applicazione, ma non avevo mai visto quel programma. Forse posso dare un'occhiata a quello che hanno fatto per realizzare questo ... – riwalk
Qual è il risultato per Convert ("Acre feet", "meters^3")? – Codism