通过查看字节来检查十进制是否包含小数位

Ton*_*Nam 4 c# decimal

有一个类似的问题在这里.有时,该解决方案会提供例外,因为数字可能会很大.

我认为如果有办法查看十进制数字的字节,它会更有效率.例如,十进制数必须由n个字节表示.例如,Int32由32位表示,所有以1位开头的数字都是负数.也许与十进制数有某种类似的关系.你怎么看十进制数的字节?或整数的字节?

Hei*_*nzi 11

如果你真的在谈论十进制数(而不是浮点数),那么Decimal.GetBits将让你看一下十进制的各个位.MSDN页面还包含对位含义的描述.

另一方面,如果你只是想检查一个数字是否有一个小数部分,做一个简单的

var hasFractionalPart = (myValue - Math.Round(myValue) != 0)
Run Code Online (Sandbox Code Playgroud)

比二元结构解码容易.这应该适用于小数以及经典的浮点数据类型,如floatdouble.在后一种情况下,由于浮点舍入错误,检查Math.Abs(myValue - Math.Round(myValue)) < someThreshold而不是比较可能是有意义的0.

  • `myValue - Math.Truncate(myValue)`可能稍微高效一点. (6认同)