SQL Server 2008+:模数和十进制/数字数据类型

时间:2016-07-26 07:27:04

标签: sql-server sql-server-2008 modulo

我的问题是:

在T-SQL中将模数运算符%decimalnumeric数据类型结合使用是一种有效的操作。

就我测试它而言似乎有效,但这实际上是decimal SELECT 2.0 % 0.4值的预期行为,例如0.0SELECT itemNumber FROM item i JOIN orderItem oi ON i.ID = oi.itemID WHERE oi.orderID = @orderID AND oi.amount % i.amount <> 0.0000 ,我可以依赖它吗?

我的想法是创建一个这样的查询:

numeric(18,4)

我真的很惊讶它似乎有效。这是预期的行为吗?

我当时希望只为整数值工作,并准备使用不同的东西。

背景:

我们以预先包装的形式销售一些以米为单位的东西。数据库中的数据字段为String s = "public class NewtonsLaw{public static Integer force(Integer m,Integer n,Integer h) { Integer p = m*2+n+h; return p; } public static int force3(Integer m) { Integer q= 23; return m; } }"; System.out.println(s.substring(s.indexOf("{") + 1,s.lastIndexOf("}") - 1)); 值,某些预打包单元打包为十进制值。现在我必须创建一个程序来检查销售的商品是否是预包装单元的倍数,如果有必要适当地切割商品,请确定我们是否可以发送有效数量的预包装商品。

1 个答案:

答案 0 :(得分:1)

对于十进制数使用%运算符是危险的,因为十进制数的内部表示可能与预期不同。例如,您可以获取0.40000000000000001而不是0.4 查询SELECT 2.0 % 0.40000000000000001将返回0.39999999999999996。 也许,您应该使用CEILING函数来获取整个项目的数量:

SELECT CEILING(2.0 / 0.40000000000000001) --5