我在查询下面运行我期待值 300 (我在Excel中)。 我想在没有四舍五入的情况下获得价值300。
declare @a decimal(20, 10)
set @a = (1.00000 / 33.00000)
select @a
select @a * 9900 (0.0303030303 * 9900 = 300 in Excel).
在SQL Server中,结果为299.9999。我希望得到300而不用四舍五入。我正在使用SQL Server 2005。
答案 0 :(得分:1)
正如其他人所指出的那样,Excel正在对数字进行四舍五入。要在SQL中舍入,可以使用几个函数:
答案 1 :(得分:1)
在SQL Server中,精度的数字由分母决定。例如:
using System;
namespace TestConsole
{
class Program
{
static void Main(string[] args)
{
string outputFormat = "out/pdf";
var outputFormatEnum = outputFormat.ConverToEnum();
var outputFormatEnumValueString = outputFormatEnum.ConvertToString();
Console.WriteLine($"outputFormat: {outputFormat} | outputFormatEnumValueString: {outputFormatEnumValueString}");
Console.ReadLine();
}
}
}
这将返回1.
SELECT 1/1
这将返回1.000000。
在这种情况下,由于除以33.00000,您的答案将具有小数精度。如果你愿意,我想你可以SELECT 1/1.0
你的结果。以下查询将为您提供预期的结果。
ROUND
正如其他用户所说,尽管Excel显示了SQL Server,但它正在给出正确答案。
答案 2 :(得分:0)
您可以使用强制转换或转换:
declare @a decimal(20,10) set @a=(1.00000/33.00000) select @a select CONVERT (INT, @a * 9900)
OR
declare @a decimal(20,10) set @a=(1.00000/33.00000) select @a select CAST(@a * 9900 AS INT)