我在谷歌搜索过,还访问了十进制和数字以及SQL Server Helper,以收集数字,浮点数和十进制数据类型之间的差异,并找出应该在哪种情况下使用哪一个.
对于任何类型的金融交易(例如薪资领域),哪一个是首选的,为什么?
根据文档,该decimal.Round方法使用round-to-even算法,这对于大多数应用程序来说并不常见.所以我总是最终编写一个自定义函数来做更自然的圆半算法:
public static decimal RoundHalfUp(this decimal d, int decimals)
{
if (decimals < 0)
{
throw new ArgumentException("The decimals must be non-negative",
"decimals");
}
decimal multiplier = (decimal)Math.Pow(10, decimals);
decimal number = d * multiplier;
if (decimal.Truncate(number) < number)
{
number += 0.5m;
}
return decimal.Round(number) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这个框架设计决策背后的原因?
是否有任何内置的圆形半算法实现到框架中?或者可能是一些非托管Windows API?
对于初学者而言,这可能会产生误导,因为他们只是写了一个decimal.Round(2.5m, 0)期望3但结果是2.
我正在使用十进制列来存储数据库中的货币值,而今天我想知道要使用的精度和规模.
因为据说固定宽度的char列效率更高,我认为对于十进制列也是如此.是吗?
我应该使用什么精度和规模?我正在考虑精确24/8.这有点矫枉过正,还不够或没问题?
这就是我决定做的事情:
DECIMAL(19,4)我不认为转换率的浮点数是一个问题,因为它主要用于参考,我将把它转换为十进制.
谢谢大家的宝贵意见.
我有一些客户收到奇怪的账单.我能够找出核心问题:
SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 200 what the?
SELECT 199.96 - (0.0 * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * 199.96)) -- 199.96
SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96 …Run Code Online (Sandbox Code Playgroud) 我在SQL Server中有一个money数据类型.如何在查询中将0.00重新格式化为0?
存储成本核算值的首选数据类型是什么?金钱或十进制是什么程序性差异打赌他们?asp.net Data for Money数据类型的asp.net数据注释?
我想知道内存中存储SQL Server数据类型.
moneySQL Server中的数据类型如何存储在内存中?我知道它money存储在8个字节中并smallmoney存储在4个字节中.但我不知道怎么办?
例如,当您有123400.93的钱时,它如何以8个字节存储?
我有关于decimal和DATE数据类型的相同问题.
特别是DATE,格式为YYYY-MM-DD,但如何以3个字节存储?它是否按照此处所述进行存储:http://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
或存储特定日期的天数?
我需要在SQL 2008数据库中存储货币汇率数据.我想将rate作为decimal数据库中的数据类型.
我不确定的一件事是要给出多少小数位(例如十进制(18,?)).
因为,我将使用此服务作为源:http://openexchangerates.org/latest.json.在那里,似乎使用的最小小数位数是' 6 '.
这是正确的数字,还是可能有超过6位小数的费率?
可以像decimal(22,2)MySQL 一样存储货币价值吗?我正在为虚拟世界编写基于Web的市场和广告网络.
我试图理解为什么实体框架4在EF模式模型和数据库中四舍五入到两位小数时,精度设置为4.
这是我的一个十进制字段的模式定义:

这是我的数据库定义
CREATE TABLE OrderItems(
....
[SellPrice] [decimal](19, 4) NOT NULL,
....
Run Code Online (Sandbox Code Playgroud)
当我在计算产品的售价后执行我的插入查询时,我看到有足够的小数

MiniProfiler显示我的查询,它显示该值有小数
DECLARE ...
@15 Decimal = '100,54347826086956521739130435',
...
insert [dbo].[OrderItems](..., [SellPrice], ...)
values (..., @15, ....)
select [OrderItemId]
from [dbo].[OrderItems]
where @@ROWCOUNT > 0 and [OrderItemId] = scope_identity()
Run Code Online (Sandbox Code Playgroud)
但是,当我查看Microsoft Sql Profiler时,它SellPrice是四舍五入的
exec sp_executesql N'insert [dbo].[OrderItems](..., [SellPrice], ...)
values (..., @15, ...)',
...,@15=100.54,...'
Run Code Online (Sandbox Code Playgroud)
我很难找到值被舍入的位置.