可能重复:
如何确定十进制/双精度是否为整数?
我有一个独特的情况,其中所有数字必须保存为double我的数据库中的数据类型,但只有在某些条件下超出整数级别的精度才有价值.
起初,当我发现int这些独特的分数发生时,我试图使用然后抽象到一个新表,但在这样做几周之后,我现在可以看到它过于愚蠢并且浪费我的时间.
我知道我可以double变成一个int.这很容易.我知道如何翻译它.我不知道的是如何测试翻译它.我基本上希望想出一个简短易懂的方法
这个数字真的是双数,还是只是一个整数?
如果它是一个int(并且大部分时间都是),那么我将把它变成一个并对其进行处理.但由于要求的独特性,我还是要将数据库中的所有内容保存为double.
有任何想法吗?我知道这是一个新手问题,我已经搜索了好几个小时,但我仍然感到很困惑.
SLa*_*aks 10
把它扔到一个int看看它是否仍然相等:
if ((int)val == val)
Run Code Online (Sandbox Code Playgroud)
(int)val 将截断任何小数部分.
请注意,如果数字太大而无法保持完整的精度,则可能会出现意外情况double.
double d = ...;
if(d == (int)d)
//is int
else
//is not int
Run Code Online (Sandbox Code Playgroud)
当然由于一些精确问题,这可能无法100%工作.您可以使用
double d = ...;
if(Math.Abs(d - (int)d) < Epsilon) //const double Epsilon = 0.000001;
//is int
else
//is not int
Run Code Online (Sandbox Code Playgroud)
这篇类似的帖子向您展示了如何确定double或decimal是否有小数位.您可以使用它来确定它的类型,然后适当地存储.
该帖子接受的答案:
对于浮点数,n % 1 == 0通常是检查小数点后是否有任何内容的方法.
public static void Main (string[] args)
{
decimal d = 3.1M;
Console.WriteLine((d % 1) == 0);
d = 3.0M;
Console.WriteLine((d % 1) == 0);
}
Run Code Online (Sandbox Code Playgroud)
输出:
False
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |