好的,所以我有一个即将到期的学校作业,上面写着:编写一个名为 ShippingCost 的函数,它将接收 WeightAmount 和 WeightType 的值,然后根据以下逻辑返回运费的美元金额: 如果重量以磅为单位,则运费为 8 美元每磅。如果重量以克为单位,运费为每克 0.03 美元。1. 如果像这样调用函数:ShippingCost(2, 'LB'),它应该返回 16.002. 如果像这样调用函数:运费(2,'G'),它应该返回 0.06
我有点不知所措,试图弄清楚我是如何做到这一点的。这就是我所拥有的,它远不能工作。我不太明白这个概念。任何帮助将不胜感激。
Create Function ShippingCost (@ShippingCost DECIMAL (8,2))
RETURNS DECIMAL
AS
BEGIN
DECLARE @ShippingCostLB decimal (8,2)
DECLARE @ShippingsCostG decimal (8,2)
DECLARE @ShippingWeight decimal (8,2)
DECLARE @WeightType char (2)
SET @ShippingCostLB = '8'
SET @ShippingsCostG = '.03'
SET @WeightType = ''
SET @ShippingWeight = ''
END
IF @WeightType = 'LB'
BEGIN
SET @ShippingCost = @ShippingWeight*@ShippingCostLB
END
ELSE
BEGIN
SET @ShippingCost = [Weight]*@ShippingsCostG
END
RETURN @ShippingCost
END
你的代码看起来甚至与你的作业并不紧密。
首先 - 它清楚地说你的函数应该接受 WeightAmount
和 WeightType
的输入值 - 那么为什么它接受ShippingCost
作为输入并将WeightType
声明为局部变量?
第二,在13号线END
的目的是什么?事实上,由于不匹配的END
关键字,您的函数将无法编译。
函数体 - 根据您的描述是非常简单的条件,它的实现非常简单:
Create Function ShippingCost (@WeightAmount DECIMAL (8,2), @WeightType char(2))
RETURNS DECIMAL
AS
BEGIN
DECLARE @ShippingCost decimal (8,2)
IF @WeightType = 'LB'
SELECT @ShippingCost = 8 * @WeightAmount
ELSE IF @WeightType = 'G'
SELECT @ShippingCost = 0.03 * @WeightAmount
RETURN @ShippingCost
END
请注意,条件(在您的情况下,整个函数体)可以使用case
语句以更简单和可读的形式编写:
Create Function ShippingCost (@WeightAmount DECIMAL (8,2), @WeightType char(2))
RETURNS DECIMAL
AS
BEGIN
RETURN CASE
WHEN @WeightType = 'LB' THEN 8 * @WeightAmount
WHEN @WeightType = 'G' THEN 0.03 * @WeightAmount
END
END