相关疑难解决方法(0)

SQL Server中数字,浮点数和小数之间的差异

我在谷歌搜索过,还访问了十进制和数字以及SQL Server Helper,以收集数字,浮点数和十进制数据类型之间的差异,并找出应该在哪种情况下使用哪一个.

对于任何类型的金融交易(例如薪资领域),哪一个是首选的,为什么?

sql sql-server types

299
推荐指数
7
解决办法
67万
查看次数

为什么.NET使用银行家的舍入作为默认值?

根据文档,该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.

.net rounding

264
推荐指数
4
解决办法
5万
查看次数

在十进制列中存储货币 - 精度和规模是多少?

我正在使用十进制列来存储数据库中的货币值,而今天我想知道要使用的精度和规模.

因为据说固定宽度的char列效率更高,我认为对于十进制列也是如此.是吗?

我应该使用什么精度和规模?我正在考虑精确24/8.这有点矫枉过正,还不够或没问题?


这就是我决定做的事情:

  • 将转换率(适用时)存储在事务表本身中,作为float
  • 将货币存储在帐户表中
  • 交易金额为a DECIMAL(19,4)
  • 使用转换率的所有计算都将由我的应用程序处理,因此我可以控制舍入问题

我不认为转换率的浮点数是一个问题,因为它主要用于参考,我将把它转换为十进制.

谢谢大家的宝贵意见.

sql database database-design currency

165
推荐指数
3
解决办法
10万
查看次数

为什么SQL中的199.96 - 0 = 200?

我有一些客户收到奇怪的账单.我能够找出核心问题:

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)

t-sql sql-server precision sqldatatypes sql-server-2016

83
推荐指数
2
解决办法
5941
查看次数

如何从SQL服务器中的money数据类型转换?

我在SQL Server中有一个money数据类型.如何在查询中将0.00重新格式化为0?

sql-server currency

20
推荐指数
2
解决办法
10万
查看次数

何时在SQL Server中使用Money数据或十进制数据类型来存储成本核算值?

存储成本核算值的首选数据类型是什么?金钱或十进制是什么程序性差异打赌他们?asp.net Data for Money数据类型的asp.net数据注释?

sql sql-server currency decimal sqldatatypes

10
推荐指数
2
解决办法
2万
查看次数

SQL Server中的"money"和"decimal"数据类型如何存储在内存中?

我想知道内存中存储SQL Server数据类型.

moneySQL Server中的数据类型如何存储在内存中?我知道它money存储在8个字节中并smallmoney存储在4个字节中.但我不知道怎么办?

例如,当您有123400.93的钱时,它如何以8个字节存储?

我有关于decimalDATE数据类型的相同问题.

特别是DATE,格式为YYYY-MM-DD,但如何以3个字节存储?它是否按照此处所述进行存储:http://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html 或存储特定日期的天数?

sql memory sql-server

9
推荐指数
1
解决办法
6074
查看次数

在货币汇率中,使用的最大小数位数是多少?

我需要在SQL 2008数据库中存储货币汇率数据.我想将rate作为decimal数据库中的数据类型.

我不确定的一件事是要给出多少小数位(例如十进制(18,?)).

因为,我将使用此服务作为源:http://openexchangerates.org/latest.json.在那里,似乎使用的最小小数位数是' 6 '.

这是正确的数字,还是可能有超过6位小数的费率?

sql t-sql currency decimal currency-exchange-rates

8
推荐指数
2
解决办法
9120
查看次数

可以在MySQL中存储小数(22,2)的钱吗?

可以像decimal(22,2)MySQL 一样存储货币价值吗?我正在为虚拟世界编写基于Web的市场和广告网络.

mysql sqldatatypes

7
推荐指数
2
解决办法
1万
查看次数

当所有内容都设置为四位小数时,实体框架以小数点后两位舍入

我试图理解为什么实体框架4在EF模式模型和数据库中四舍五入到两位小数时,精度设置为4.

这是我的一个十进制字段的模式定义:

SellPrice指定比例为19,4

这是我的数据库定义

CREATE TABLE OrderItems(
....
[SellPrice] [decimal](19, 4) NOT NULL,
....
Run Code Online (Sandbox Code Playgroud)

当我在计算产品的售价后执行我的插入查询时,我看到有足够的小数

SellPrice显示许多小数

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)

我很难找到值被舍入的位置.

c# sql-server-2008-r2 entity-framework-4

5
推荐指数
1
解决办法
2671
查看次数