寻求以下问题的解决方案。
在我们的应用程序中,我们具有根据用户选择转换单位的功能。例如根据用户的单位选择,将kg转换为lbs,反之亦然。
我正在寻找这个问题的解决方案,这可能是最好的解决方案,而且变化很小。
表定义
Id | UnitConversion
1 | 100
2 | 200
3 | 30
我们的应用程序是开发的 Angularjs,webapi和sql server
答案 0 :(得分:1)
只是为了好玩,这是我的转换实用程序的精简版本。只是在这里展示MASS。通过将转换因子存储为varchar,精度处于单个记录级别。
Declare @Map table (MapType varchar(50),MapName varchar(50),MapValue varchar(50))
Insert Into @Map values
('Mass','tonnes (metric)','1000'),
('Mass','tons (US)' ,'907.18474'),
('Mass','tons (UK)' ,'1016.0469088'),
('Mass','stones' ,'6.35029318'),
('Mass','slugs(g-pounds)','14.593903'),
('Mass','Solar masses' ,'1.989e30'),
('Mass','pounds (troy)' ,'0.3732417216'),
('Mass','pounds' ,'0.45359237'),
('Mass','picograms' ,'1e-15'),
('Mass','ounces' ,'0.028349523'),
('Mass','ounces (troy)' ,'0.0311034768'),
('Mass','nanograms' ,'1e-12'),
('Mass','milligrams' ,'1e-6'),
('Mass','micrograms' ,'1e-9'),
('Mass','megatonnes' ,'1e9'),
('Mass','kilotonnes' ,'1e6'),
('Mass','kilograms' ,'1'), --- << Base
('Mass','hundredweights' ,'50.80234544'),
('Mass','hectograms' ,'0.1'),
('Mass','grams' ,'1e-3'),
('Mass','grains' ,'0.00006479891'),
('Mass','femtograms' ,'1e-18'),
('Mass','Earth masses' ,'5.980e24'),
('Mass','decagrams' ,'0.01'),
('Mass','cental' ,'45.359237'),
('Mass','carats (metric)','0.0002')
Declare @Value float = 1
Declare @From varchar(50)= 'kilograms'
Declare @To varchar(50)= 'pounds'
Select @Value * Max(IIF(MapName=@From,cast(MapValue as float),null)) / Max(IIF(MapName=@To,cast(MapValue as float),null))
From @Map
Where MapName in(@From,@To)
返回
2.20462262184878
答案 1 :(得分:0)
在Sql server端选择更精细的比例然后您需要返回到客户端。例如,如果您需要小数点右侧的5位数,请将DB列的比例设置为7
declare @n decimal(20,5) = 2.20462;
declare @t table (
m decimal(20,7)
);
insert @t(m) values
(1./@n),
(10./@n),
(1000./@n);
select cast(m*@n as decimal(20,5)) as r
from @t;
注意&#34;十进制和数字是同义词,可以互换使用。&#34; msdn.microsoft.com/en-us/library/ms187746.aspx