当前位置: 首页 > 面试题库 >

为什么在SQL Server 2000上的TSQL会舍入小数位数不一致?

卫烨
2023-03-14
问题内容

我正在尝试计算美元金额的折算百分比。在50%的价格下,有时您会得到半分钱,我需要四舍五入到最接近的一分钱。

在Sql中,我的计算如下:

round(retail * 0.5, 2, 0)

如果采用以下值,则会得到不同的结果:

  • 4.39
  • 2.49

不全面的我得到:

  • 4.39-> 2.195
  • 2.49-> 1.245

取整后得到:

  • 2.195-> 2.19
  • 1.245-> 1.25

有人告诉我这是“银行取整”的一种形式,但似乎影响取整方向的值是整数值。

我的问题是,我希望最高值会四舍五入到2.20。如果这确实是银行家的四舍五入,并且受此处的整数值影响,请问有人有防止这种行为的示例。如果不是银行家四舍五入,请问有人能提供解释并可能提供解决办法,以使正常的四舍五入行为成为可能吗?

提前致谢!


问题答案:

什么是数据类型retail?我无法在SQL 2000上对此进行测试,但是在SQL 2008 R2上,如果使用,我会看到类似的结果float

float:         4.39 --> 2.195, rounds to 2.19 
               2.49 --> 1.245, rounds to 1.25

money:         4.39 --> 2.195, rounds to 2.20
               2.49 --> 1.245, rounds to 1.25

decimal(5,2):  4.39 --> 2.195, rounds to 2.20
               2.49 --> 1.245, rounds to 1.25

要显示由创建的近似值float,可以将decimal(20,19)其强制转换为,然后很清楚为什么要采用这种方式进行四舍五入:

4.39 * 0.5 --> 2.1949999999999999000
2.49 * 0.5 --> 1.2450000000000001000


 类似资料:
  • 问题内容: 我正在尝试从Firestore数据库中的python程序中存储64位整数。问题在于,似乎最后一位数字已四舍五入。 当我查看数据库时,它们存储为: 根据文档,支持64位带符号整数。可能是什么问题? 问题答案: 我不确定100%,但是我的猜测是您看到的是JavaScript整数的大小不是64位。它们实际上更像是53位。由于Firebase控制台是使用JavaScript实现的网络应用,因此

  • 问题内容: 如何将matchpercent的结果四舍五入到小数点后两位(%)?我正在使用以下方法返回一些结果: 问题答案: 转换/转换结果: …这里的数字足够大,不能截断小数点左边。也就是说,如果使用“ 123.456”,则由于总长度为7位,因此需要使用DECIMAL(7,2)。

  • 如果一个数字有精确的二进制表示,比如(十进制)0.5,难道不应该正确地四舍五入吗? 编辑:该问题发生在3.4.3版本中,但不发生在2.7.6版本中

  • 问题内容: 我试图确定截断或删除SQL中多余的小数位而不舍入的最佳方法。例如: 这将自动舍入为,这在大多数情况下是很好的。但是,对于这个项目,我不需要。有没有一种简单的方法可以截断我不需要的小数?我知道我可以使用该函数并将其转换回十进制。还有其他方法吗? 问题答案:

  • 问题内容: 我正在使用eclipse + Android SDK。 我需要将浮点值四舍五入到2位小数。我通常使用数学库使用下一个“技巧”。 但是我觉得这不是最好的方法。 是否有图书馆可以进行此类操作? 问题答案: 2年前,我使用Java进行统计,但我仍然得到一个函数的代码,该函数使您可以将数字四舍五入到所需的小数位数。现在,您需要两个,但是也许您想尝试使用3来比较结果,并且此函数为您提供了这种自由

  • 因此,为了保持精度,我必须将double转换为字符串,然后调用convert.todecimal(String): 这个方法是有效的,但是我想避免使用字符串变量来将Double转换为Decimal,而不是在15位数后取整?