Мне нужно сохранить и выполнить некоторые базовые вычисления (в основном, умножение) для денежных значений, таких как £0.00005756
, £0.01
, £0.000000000000123
и т. Д. Максимальное количество десятичных разрядов будет 15, но может быть достаточно большими числами на другой стороне тоже. Если на левой стороне больше 0
, маловероятно, что будет использовано более 2 десятичных знаков, но это возможно. Числа, с которыми у меня были проблемы, это когда они идут выше 2 десятичных знаков.
Я создал тестовую таблицу и вставил некоторые основные данные. К сожалению, он не может хранить действительно маленькие цифры.
Примечание. Я создал столбец money2
как столбец [decimal](18, 4)
, так как это рекомендуется, когда я искал, что использовать для денежных значений. Однако мне нужно 15 десятичных знаков, поэтому существует money1
.
Создание таблицы:
CREATE TABLE [dbo].[MoneyTest](
[id] [int] IDENTITY(1,1) NOT NULL,
[money1] [decimal](18, 15) NULL,
[money2] [decimal](18, 4) NULL,
CONSTRAINT [PK_uMoneyTest] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
insert into moneytest
(money1, money2) values
(£0.01,£0.01)
insert into moneytest
(money1, money2) values
(£0.000000000000123,£0.000000000000123)
insert into moneytest
(money1, money2) values
(£0.00005756,£0.00005756)
select * from moneytest
возвращает следующие результаты:
id money1 money2
7 0.010000000000000 0.0100
8 0.000000000000000 0.0000
9 0.000100000000000 0.0001
Я ожидал этих результатов, хотя:
id money1 money2
7 0.010000000000000 0.0100
8 0.000000000000123 0.0000
9 0.000575600000000 0.0001
В частности, строка id 9, кажется, округляется до 1 (в десятичной точке 4) вместо того, чтобы показывать фактическую цифру. Я думал, что это произошло только при использовании столбцов с плавающей запятой, которые оценивают числа и что десятичная дробь должна была быть более точной?
Это просто проблема с типом данных или это то, что я вообще не должен пытаться решить в базе данных?