【问题标题】:How to get readable value from columns with data type real in mssql如何从 mssql 中数据类型为 real 的列中获取可读值
【发布时间】:2014-03-06 04:28:06
【问题描述】:
我有一些像这样的规格数据(LSL/USL), 数据类型为实数, 如果我用 MSSQL Server Management Studio(简称 MSSMS)查询, 它显示为 0.45, 但如果我通过 php4.4 的 sqlsrv 驱动程序使用 php 查询, 我得到了 0.44999998807907,但我需要在 MSSMS 中得到完全相同的值, 这不仅仅是四舍五入的问题,
ex: 
php => 0.00030000001424924, MSSMS => 0.0003
php => 0.0049999998882413, MSSMS => 0.005
php => 0.0049000000581145, MSSMS => 0.0049

还有!!!!上面的例子是同一列,所以不能通过简单地应用于 ROUND() 来修复。

我知道 real 是近似数字, 所以得到这个是合理的, 但我需要一个解决方法, 当我们使用asp或vb时,我们没有这个问题, 可能是数据驱动程序的一些隐式转换, 无论如何,欢迎任何建议或评论。 **首先,我想对所有花时间帮助我的人说声“谢谢”。** 但这个问题实际上可能更棘手, 对不起,我没有展示足够的例子来指导你正确的方式,
DECLARE @TABLE TABLE(VALUE REAL)
INSERT INTO @TABLE VALUES
(0.00030000001424924),(0.0049999998882413),(0.0049000000581145),
(0.000099999997473788),(0.60000002384186),(0.000039999998989515),
(0.00025000001187436)

SELECT  CAST(VALUE AS DECIMAL(10,4)) AS [Decimal Values] 
       ,ROUND(VALUE, 4)              AS [Rounded values]
       ,CAST(VALUE AS NUMERIC(10,4)) AS [Numeric Values]
FROM @TABLE
在上述情况下, 0.00025000001187436 在 MSSMS 中应该是 0.00025,但我们会得到 0.0003 0.000039999998989515 应该是 4E-05。 我们如何在 PHP 查询中模拟并获得相同的结果? 那可能吗? 而且,如果我决定将数据类型从实数更改为十进制, 小数的正确精度是多少?十进制(?,?) 不丢失精度。

【问题讨论】:

  • 您是否一开始就故意使用 REAL? 0.005 可以像0.0050 一样“可读”吗?如果是这样,那么只需使用比例为 4 的 DECIMAL,例如CONVERT(DECIMAL(9,4), col)。如果您希望显示的小数位数取决于第一个 0 在更重要的数字之后的位置,请在表示层中对其所属的位置执行此格式化。

标签: php sql-server floating-point sqldatatypes


【解决方案1】:

有几种方法可以做到这一点,一种是 Aaron 建议的,还有一些方法如下

测试数据

DECLARE @TABLE TABLE(VALUE REAL)
INSERT INTO @TABLE VALUES
(0.00030000001424924),(0.0049999998882413),(0.0049000000581145)   

查询

SELECT  CAST(VALUE AS DECIMAL(10,4)) AS [Decimal Values] 
       ,ROUND(VALUE, 4)              AS [Rounded values]
       ,CAST(VALUE AS NUMERIC(10,4)) AS [Numeric Values]
FROM @TABLE

结果集

╔════════════════╦════════════════╦════════════════╗
║ Decimal Values ║ Rounded values ║ Numeric Values ║
╠════════════════╬════════════════╬════════════════╣
║ 0.0003         ║ 0.0003         ║ 0.0003         ║
║ 0.0050         ║ 0.005          ║ 0.0050         ║
║ 0.0049         ║ 0.0049         ║ 0.0049         ║
╚════════════════╩════════════════╩════════════════╝

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 2019-10-18
    • 1970-01-01
    • 2010-12-04
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多