非常直截了当的问题,我想用十进制在1列中存储英尺和英寸,但我不希望它像浮动类型一样被截断。
答案 0 :(得分:4)
以MKS(公制)存储您的所有数据。在呈现和存储时将数据转换为国际标准。并将其存储为十进制类型。
因此,如果您收集数据的工具是6'2“格式,请将其转换为cm并保存在数据表中。然后将其反转以显示。
以十进制厘米的标准格式保存。找到具有相同高度范围的人更容易,就像Ft和In在单独的列中一样,范围真的很难。
答案 1 :(得分:2)
仍然在缅甸,利比里亚使用的帝国单位制度,遗憾的是北美的一个国家不是非常符合算术的。有no native data-type来处理奇怪的base12 / base3 / base1860数学。
您应该使用更广泛使用的公制系统,并使用代表米的FLOAT或DECIMAL值。
但是,如果你真的想继续使用英制系统,你应该以英寸为单位存储值,并在GUI级别上将对话设置为英尺+英寸。
答案 2 :(得分:1)
Decimal可让您存储精确的精度。
问题是,如果您想以英尺或英寸存储它。
如果是英寸那么: 脚* 12 +英寸
如果脚那么: 脚+(英寸/ 12)
如果转换回英寸
declare @inches dec(8,4)
declare @indesinfoot as dec(8,4);
set @indesinfoot = 12;
set @inches = (12*@indesinfoot) + 6.25;
print @inches;
SELECT cast(@inches/@indesinfoot as Int) as feet,
inches % @indesinfoot AS inches;
我会选择英寸,因为你可以通过除法得到一些舍入误差,但不能用乘法。
答案 3 :(得分:0)
使用DECIMAL数据类型
它允许您指定满足特定需求所需的精度,而不会像FLOAT那样截断
答案 4 :(得分:0)
NUMERIC()
或DECIMAL()
适用于单列回答,但您需要决定是否存储英尺或英寸。这些字段使用精确的数学和准确的存储。
如果必须存储英尺和英寸,则需要定义自己的数据类型(相当复杂)或使用两个NUMERIC()
或DECIMAL()
字段。
在测量人类大小的东西时,并不是因为FLOAT
而导致脚或英寸的精度问题。你会被头发弄掉。字面上。
答案 5 :(得分:0)
将旧英语系统转换为公制的示例过程。没有错误检查,但它会让您知道如何将输入的数据转换为数据进行存储。
CREATE PROCEDURE usp_ConvertHeight
@Input varchar(10)
AS
BEGIN
DECLARE
@FT AS DECIMAL(18,10) = 0,
@IN AS DECIMAL(18,10) = 0,
@CM AS DECIMAL(18,10)
SELECT @FT = CAST(left(@Input,CHARINDEX('''',@Input,1) - 1) AS DECIMAL(18,10));
SELECT @IN = CAST(REPLACE(SUBSTRING(@Input,CHARINDEX('''',@Input,1) + 1,10),'"','')AS DECIMAL(18,10));
SET @CM = 2.54 * ((12 * @FT) + @IN);
SELECT @CM
END
答案 6 :(得分:0)
我建议store the data in single unit,either inches or in cm.
理想情况下,为用户提供以任何格式输入的选项。转换并显示所有可能单位的用户信息,如英尺和英寸和厘米。