Properties like ShippingChargeAmount are stored as decimal(18,0) in sql server and parameters are the same.

This rounds any decimal numbers as (18,0) does not allow for digits after decimal point. Need to change this to money datatype (in both table and stored proc) or adjust decimal datatype to allow for required number of digits e.g. decimal(18,2) to allow 1.53

See below:

--------------------------------------------------------------------------------------------------------------

Changed: Relevant Shipping method tables e.g. Nop_ShippingByTotal. Change ShippingChargeAmount field to datatype money.

Change Update and Insert stored procedures e.g. Nop_ShippingByTotalUpdate, input paramter to data type money.


ALTER PROCEDURE [dbo].[Nop_ShippingByTotalUpdate]
(
  @ShippingByTotalID int,
  @ShippingMethodID int,
  @From decimal(18, 0),
  @To decimal(18, 0),
  @UsePercentage bit,
  @ShippingChargePercentage decimal(18, 0),
  @ShippingChargeAmount money
)
AS
BEGIN
  UPDATE [Nop_ShippingByTotal]
  SET
    ShippingMethodID=@ShippingMethodID,
    [From]=@From,
    [To]=@To,
    UsePercentage=@UsePercentage,
    ShippingChargePercentage=@ShippingChargePercentage,
    ShippingChargeAmount=@ShippingChargeAmount
  WHERE
    ShippingByTotalID = @ShippingByTotalID
END

Reason:

Current fields are stored as decimal(18,0). This means the 0 of the total number of digits are allowed to the right of the decimal point - therefore restricting you to whole numbers.

In the cases of currency, you can change this to the sql data type money. For other decimal fields you may want to adjust the field to decimal(18,2) to allow for decimal values.

--------------------------------------------------------------------------------------------------------------