相关疑难解决方法(0)

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

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

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

sql sql-server types

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

什么时候应该使用double而不是decimal?

我可以说使用double(或float)代替以下三个优点decimal:

  1. 使用较少的内存.
  2. 更快,因为处理器本身支持浮点数学运算.
  3. 可以代表更大范围的数字.

但这些优势似乎只适用于计算密集型操作,例如建模软件中的操作.当然,在需要精确度时,不应使用双精度数,例如财务计算.那么有没有任何实际的理由选择double(或float)而不是decimal"正常"的应用程序?

编辑补充:感谢所有伟大的回应,我向他们学习.

还有一个问题:一些人认为双打可以更精确地代表实数.宣布时,我认为他们通常也会更准确地代表他们.但是,当执行浮点运算时,准确度是否会降低(有时是显着的)是真实的说法吗?

c# floating-point double types decimal

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

(.1f + .2f ==.3f)!=(.1f + .2f).Equals(.3f)为什么?

我的问题不是浮动精度.这是为什么Equals()不同于==.

我明白为什么.1f + .2f == .3ffalse(同时.1m + .2m == .3mtrue).
我得到的==是参考,.Equals()是价值比较.(编辑:我知道还有更多.)

但是,为什么(.1f + .2f).Equals(.3f) true,而(.1d+.2d).Equals(.3d)仍然是false

 .1f + .2f == .3f;              // false
(.1f + .2f).Equals(.3f);        // true
(.1d + .2d).Equals(.3d);        // false
Run Code Online (Sandbox Code Playgroud)

c# equality floating-accuracy

67
推荐指数
3
解决办法
5938
查看次数

存储统计数据,我需要DECIMAL,FLOAT还是DOUBLE?

我正在创造乐趣,但我仍然想认真对待它,一个主持各种测试的网站.通过这些测试,我希望收集统计数据.

一些数据将包括测试完成程度的百分比.我可以轻松地计算测试的百分比,但我希望返回真实数据,因为我存储了有关完成时测试的各种不同值.

在PHP浮点数中,大多数值都是,所以我的问题是,如果我想要真正的统计数据,我应该将它们作为FLOAT,DOUBLE或DECIMAL存储在MYSQL中.

我想利用MYSQL的功能AVG(),LOG10()如以及TRUNCATE().为了让MYSQL根据我插入的值返回真实数据,我应该使用什么作为数据库列选择.

我问,因为有些数字可能是浮点数,例如10,10.89,99.09,或者只是0,但我希望返回真实有效的统计数据.

我可以依靠浮点数学吗?

编辑

我知道这是一个普遍的问题,我道歉,但对于像我这样的非数学家,我也不是MYSQL专家,我想对这个领域的专家提出意见.

我已经完成了我的研究,但我仍然觉得我对这个问题有一个阴云密布的判断.如果我的问题不合适或不适合本网站,我再次道歉.

mysql floating-point double decimal

63
推荐指数
4
解决办法
6万
查看次数

56
推荐指数
3
解决办法
5万
查看次数

C#十进制数据类型性能

我正在用C#编写财务应用程序,其中性能(即速度)至关重要.因为它是一个财务应用程序,我必须集中使用Decimal数据类型.

在分析器的帮助下,我尽可能地优化了代码.在使用Decimal之前,所有操作都是使用Double数据类型完成的,并且速度提高了几倍.但是,Double不是一个选项,因为它具有二进制特性,在多个操作过程中会导致很多精度错误.

是否有可以与C#连接的十进制库,这可以使我在.NET中的原生Decimal数据类型上获得性能提升?

基于我已经得到的答案,我注意到我不够清楚,所以这里有一些额外的细节:

  • 应用程序必须尽可能快(即使用Double而不是Decimal时的速度,这将是一个梦想).Double比Decimal快约15倍,因为操作是基于硬件的.
  • 硬件已经是一流的(我在双氙四核上运行)并且应用程序使用线程,因此机器上的CPU利用率始终是100%.此外,该应用程序以64位模式运行,与32位相比,它具有可测量的性能优势.
  • 我已经超越了理智的程度(超过一个半月的优化;信不信由你,它现在需要大约1/5000的时间来完成我最初用作参考的相同计算); 这种优化涉及到一切:字符串处理,I/O,数据库访问和索引,内存,循环,改变一些事情的方式,甚至使用"切换"而不是"if"到处都有所不同.分析器现在清楚地显示剩余的性能元凶是在Decimal数据类型运算符上.没有别的东西会增加相当多的时间.
  • 你必须在这里相信我:我已经尽可能地进入C#.NET领域来优化应用程序,我对它目前的性能感到非常惊讶.我现在正在寻找一个好主意,以便将Decimal性能提高到接近Double的水平.我知道这只是一个梦想,但只是想检查一下,我想到了一切可能.:)

谢谢!

c# performance decimal

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

将结果转换为float方法返回float更改结果

为什么此代码False在.NET 4中打印?似乎一些意外的行为是由显式演员引起的.

我想要一个超越"浮动点不准确"或"不要那样做"的答案.

float a(float x, float y)
{
  return ( x * y );
}

float b(float x, float y)
{
  return (float)( x * y );
}

void Main()
{
  Console.WriteLine( a( 10f, 1f/10f ) == b( 10f, 1f/10f ) );
}
Run Code Online (Sandbox Code Playgroud)

PS:此代码来自单元测试,而不是发布代码.代码是故意以这种方式编写的.我怀疑它最终会失败,但我想知道确切的时间和原因.答案证明了这种技术的有效性,因为它提供的理解超出了对浮点确定性的通常理解.这就是用这种方式编写代码的重点; 刻意探索.

PPS:单元测试在.NET 3.5中传递,但现在在升级到.NET 4后失败了.

.net c# floating-point casting .net-4.0

53
推荐指数
1
解决办法
5133
查看次数

如何正确比较C#中的十进制值?

我来自C++的背景,我知道你无法准确地比较浮点数是否相等.对于C#,我只是假设相同的策略适用于十进制值或一般的任何浮点值.

基本上,我有两个十进制值,如果它们彼此不相等,我需要执行一些操作.例如:

decimal value1, value2;
// Assume value1 and value2 are set somewhere to valid values.
if( value1 != value2 )
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

如果这不能按预期工作,我愿意接受一个与误差范围进行相等比较的解决方案,比如.00001或类似的东西.这个问题的推荐解决方案是什么?

c# floating-point comparison

49
推荐指数
4
解决办法
6万
查看次数

哪种SQL Server字段类型最适合存储价格值?

我想知道SQL Server中的价格字段对于类似商店的结构的最佳类型是什么?

看看这个概述,我们有数据类型称为money,smallmoney,然后我们有十进制/数字,最后浮动真实.

名称,内存/磁盘使用情况和值范围:

  • 资金: 8字节(值:-922,337,203,685,477.5808至+922,337,203,685,477.5807)
  • Smallmoney: 4个字节(值:-214,748.3648到+214,748.3647)
  • 十进制: 9 [默认,分钟.5]字节(值:-10 ^ 38 +1到10 ^ 38 -1)
  • 浮点数: 8个字节(值:-1.79E + 308到1.79E + 308)
  • 实际: 4个字节(值:-3.40E + 38到3.40E + 38)

将价格值存储在这些类型中真的很明智吗?那怎么样.INT?

  • Int: 4个字节(值:-2,147,483,648到2,147,483,647)

让我们说一家商店使用美元,他们有美分,但我认为价格不是49.2142342所以使用大量小数显示美分似乎浪费了SQL带宽.其次,大多数商店不会显示200.000.000附近的任何价格(至少在正常的网上商店,除非有人试图在巴黎卖给我一座着名的塔)

那么为什么不去找一个int?

一个int很快,它只有4个字节,你可以很容易地产生小数,通过以美分而不是美元保存值然后在你呈现值时除以.

另一种方法是使用4个字节的smallmoney,但这需要CPU的数学部分来进行计算,其中Int是整数幂......在缺点上你需要划分每个结果.

使用smallmoney/money字段时,区域设置是否存在"货币"相关问题?这些在C#/ .NET中也会转移什么?

任何利弊?去整数价格或小钱币或其他?

你的经验告诉我什么?

c# sql-server database-design query-optimization linq-to-sql

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

"双"和"双"的区别

__PRE__

"Double"和"double"有什么区别?

*请帮忙

java double

21
推荐指数
1
解决办法
4万
查看次数