【发布时间】:2012-01-16 16:02:40
【问题描述】:
我有一个十进制值 34.3287332 我怎样才能得到像 .3287332 这样的值的分数,请任何人帮忙(我可以将其转换为字符串并得到分数。但我不需要)
【问题讨论】:
标签: .net sql sql-server-2008 tsql c#-4.0
我有一个十进制值 34.3287332 我怎样才能得到像 .3287332 这样的值的分数,请任何人帮忙(我可以将其转换为字符串并得到分数。但我不需要)
【问题讨论】:
标签: .net sql sql-server-2008 tsql c#-4.0
【讨论】:
我只会获取整个值,然后获取余数:
decimal total = /* get value from database */;
decimal fraction = decimal.Remainder(total, 1m);
(可能有一种更有效的方法来获取剩余部分,但这很简单。)
虽然您也可以在 SQL 中执行此操作,但当您想使用 LINQ to SQL 或任何类似方法获取值时,这可能效果不佳 - 我更喜欢将值操作放在 .NET 代码中而不是 SQL 中,除非它影响结果或性能。
【讨论】:
请注意,上面的 FLOOR 建议不适用于 负 数字;你需要ABS(my_float_value) - FLOOR(ABS(my_float_value)) 才能得到正确的答案。
如果您发现自己使用 SQLite 后端,您会发现它没有 FLOOR 函数,并且“my_float_value % 1”技巧也无效。然后您可以应用 CAST 来获得等效的功能:
ABS(my_float_value) - CAST(ABS(my_float_value) AS INTEGER)
【讨论】: