- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 SSRS 2008 报告,其数据集运行一个返回计算列的 SQL 查询。此数据集填充报告中的表格。
计算列最多返回 4 位小数。我想四舍五入到最接近的两位小数。即 8660.125 应该变成 8660.13,1487.8521 应该变成 1487.85
查询示例:
select [Hours] * [Rate] * [Complexity] * [Efficiency] from Hours
我更愿意在 SQL 查询而不是 SSRS 表中执行此舍入,因为我们试图使表保持“非智能”,以便我们可以将所有逻辑封装在 SQL 查询本身中。有什么建议吗?
最佳答案
这里有两个问题。
首先是四舍五入。这可以通过 SQL 中的 Round
函数轻松完成:
SELECT Round(8660.125, 2);
-- returns 8660.130
第二个,如您所见,这仍然返回小数点后 3 位数字。这是由于数据类型。你得到了你的四舍五入值,但它仍然显示一个额外的数字。
你可以这样解决:
SELECT Convert(decimal(16, 2), 8660.125);
--returns 8660.13 by implicitly rounding--you could round first but not needed
但是,上面这两个值在数值上相同。在我看来,您根本不应该在 SQL Server 端处理表示。如果您需要两位小数,只需将 SSRS 报告中的单元格格式设置为 #.00
。这将确保您获得所需的(四舍五入的)小数位数,无论如何!不需要任何功能。只是一个简单的属性。
日期也是一样的道理。日期的基础值只是一个数字。但是有无数种方法可以向用户显示日期——使用长名称或各部分的不同顺序或使用不同的分隔符。每次更改日期格式时,您都会回到 SQL 并更改您的 Convert()
样式吗?
您不希望 SQL Server 确定这些数字在报表中的字体、颜色、大小、填充、样式、位置或可见性。这些也都必须在设计时手动设置。那么为什么值的显示方式(当值完全相等时)会有所不同呢?在我看来,将其插入 SQL 查询会将关注的区域移到错误的位置。那是在不需要存在的查询中增加复杂性(而不是“智能”)!而且我也没有看到将单元格的数字格式设置为“增加智能”。
这是一个表示问题,因此请将其放在所有其他表示元素都已处理的适当位置 - SSRS 报告。
更新
我可以想到一种情况,您希望在查询中执行转换,这时该值将进一步用于更多计算,并且有关所述计算的业务规则需要它。例如,如果您正在计算银行利息,他们可能有这样的规则:“在第 1 步之后舍入到小数点后 4 位,然后在第 3 步之后最终舍入到小数点后 2 位(美元和美分)”。但这是一个不同的故事:现在值(value)很重要,而不仅仅是它的展示。
关于SQL 从 3 位小数舍入到 2 位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14635110/
我在 ASP.NET MVC 中有一个发票页面。 我正在计算 GST。 在 javascript 中这是结果。 165.45 * 0.1 = 16.544999999999998 在 C# 中我得到
在 JavaScript 中,我想将其减少到小数点后 5 位。不过,我不能简单地四舍五入并得到 0.03085,我需要进一步查看数字并将所有数字向上舍入,以便得到 0.03086。 输入:0.0308
有人可以解释为什么 R 这样做吗?在整数值上舍入最大值和最小值似乎非常有缺陷。 summary(1:1283932) Min. 1st Qu. Median Mean 3rd Qu.
所以基本上我正在做一个物理实验,在我的表格中,我希望我的数据四舍五入到与误差相同的精度,四舍五入为 1 sig fig。 例如,如果我有以下内容: angle signif(c(1.111,2.22
考虑以下 C# 代码... double x = Math.Round(72.6d, 2, MidpointRounding.ToZero); double y = Math.Round(82.6d,
我正在学习 BigDecimal,我希望它检索我输入的确切数字,以下代码正在处理该数字,我不知道为什么 public static BigDecimal parseFromNumberString(S
double y1 = 0; double y2 = 0; double i = 0.025; double n = 2; double h1 = 2000; double h2 = 4000
所以在下面的一组代码中,出于某种原因我得到了完全错误的答案...... import java.util.*; import java.io.*; import java.lang.*; import
在 Python 中,我想将两个数字相除,如果答案不是整数,我希望将数字四舍五入为上面的数字。 例如 100/30 不是给 33.3 而是给 4。谁能建议如何做到这一点?谢谢。 最佳答案 您可以使用
我需要对一个 float 进行四舍五入。例如 4.00011 。内置函数 round() 总是在数字 > .5 时向上舍入,在 = 0 val *= 10 ** precision r
我的代码: // Convert SATOSHIS to BITCOIN static double SATOSHI2BTC(const uint64_t& value) {
我想让我的 tableView 看起来像这样: 我有问题。只有在我点击单元格后,我的右角才会变圆。当 View 出现时,它看起来像这样: 点击后像这样: 这是我的代码: extension UITab
这个问题在这里已经有了答案: Precision String Format Specifier In Swift (31 个答案) 关闭 8 年前。 除了覆盖当前转换为字符串的方法之外,是否有一种
>>> a = 0.3135 >>> print("%.3f" % a) 0.314 >>> a = 0.3125 >>> print("%.3f" % a) 0.312 >>> 我期待 0.313
我有自动将输入字段加在一起的 javascript 函数,但是添加像 1.35 + 1.35 + 1.35 这样的数字会得到 4.050000000000001 的输出,这只是一个例子。如何将总数四舍
这可能是 x86 FPU 专家的问题: 我正在尝试编写一个生成范围 [min,max] 内的随机浮点值的函数。问题是我的生成器算法(浮点 Mersenne Twister,如果你好奇的话)只返回 [1
我一定错过了一些明显的东西。 select CEILING(85/30) = 2 85/30 = 2.83333 我希望该值为 3。 CEILING 函数不应该为我取整吗? 最佳答案 尝试 SELEC
我有一个关于 eclipse rcp 中的 ctabfolders 的问题。我创建了一个 e4 RCP 应用程序,其中包含一个包含堆栈部分容器的窗口,其中包含一个堆栈。该堆栈包含 1 个部分。在这一部
Closed. This question needs details or clarity。它当前不接受答案。
我读过其他一些帖子,它们似乎对其他人有用,但当我尝试它们时,它们不起作用。我刚刚开始学习Java编程,我似乎不明白如何四舍五入。 我试过了 answer = input * input; answer
我是一名优秀的程序员,十分优秀!