对不起,这可能是一个简单的愚蠢问题,但我需要知道确定.
我有这个if表达,
void Foo()
{
System.Double something = GetSomething();
if (something == 0) //Comparison of floating point numbers with equality
// operator. Possible loss of precision while rounding value
{}
}
Run Code Online (Sandbox Code Playgroud)
这个表达是否与...相等
void Foo()
{
System.Double something = GetSomething();
if (something < 1)
{}
}
Run Code Online (Sandbox Code Playgroud)
?因为那时我可能会遇到问题,输入if例如0.9的值.
可能重复:
如何确定十进制/双精度是否为整数?
我有一个double类型的变量,我想检查它是否是一个整数.
目前我有
public bool CheckIfInteger(double number)
{
return number.ToString().Contains(".") == false;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
更新:对不起我没有意识到混淆的可能性,整数我的意思是整数的数学定义,即自然数和非零自然数的负数.
可能重复:
如何确定十进制/双精度是否为整数?
我有一个独特的情况,其中所有数字必须保存为double我的数据库中的数据类型,但只有在某些条件下超出整数级别的精度才有价值.
起初,当我发现int这些独特的分数发生时,我试图使用然后抽象到一个新表,但在这样做几周之后,我现在可以看到它过于愚蠢并且浪费我的时间.
我知道我可以double变成一个int.这很容易.我知道如何翻译它.我不知道的是如何测试翻译它.我基本上希望想出一个简短易懂的方法
这个数字真的是双数,还是只是一个整数?
如果它是一个int(并且大部分时间都是),那么我将把它变成一个并对其进行处理.但由于要求的独特性,我还是要将数据库中的所有内容保存为double.
有任何想法吗?我知道这是一个新手问题,我已经搜索了好几个小时,但我仍然感到很困惑.
是否有一种更有效的方法来做到这一点,有些事情只是感觉不对劲?我正在寻找以对数方式记录最有效的方法.
public bool Read()
{
long count = Interlocked.Increment(ref _count);
switch (count)
{
case 1L:
case 10L:
case 100L:
case 1000L:
case 10000L:
case 100000L:
case 1000000L:
case 10000000L:
case 100000000L:
case 1000000000L:
case 10000000000L:
case 100000000000L:
case 1000000000000L:
case 10000000000000L:
case 100000000000000L:
case 10000000000000000L:
case 100000000000000000L:
case 1000000000000000000L:
_logger.LogFormattable(LogLevel.Debug, $"{count} Rows Read");
break;
}
return _reader.Read();
}
Run Code Online (Sandbox Code Playgroud)
更新:
这是我的微基准测试.
因为对我而言,没有记录就读取了100,000,000条记录需要大约20分钟,那么额外的4秒就没有了.我将采用美丽的数学方式做事.Mathod3在我的场景中胜出.
Run time for 100,000,000 iterations averaged over 100 attempts
Method1 Max: 00:00:00.3253789
Method1 Min: …Run Code Online (Sandbox Code Playgroud)