我可能会在这里错过某种观点,如果是这种情况 - 请将该讨论作为我问题的一部分:).
这是一个缩短并重命名的工作代码示例.这GetTicks(…)是一个单一的样本,可以是任何类型的功能(值> 0 < 9应返回特定的枚举a.so).
public static class Something
{
public enum TypeOf : short
{
Minute = 2, Hour = 3, Day = 4, …
}
public static long GetTicks(Something.TypeOf someEnum)
{
long ticks = 0;
switch (someEnum)
{
case Something.TypeOf.Minute:
ticks = TimeSpan.TicksPerMinute;
break;
case Something.TypeOf.Hour:
ticks = TimeSpan.TicksPerHour;
break;
....
}
return ticks;
}
}
// This class is called from anywhere in the system.
public static void SomeMethod(string dodo, object …Run Code Online (Sandbox Code Playgroud) double[] someDoubles = { 34.6, 45.1, 55.5, 78.5, 84.66, **1400.32**, 99.04, 103.99 };
Run Code Online (Sandbox Code Playgroud)
上面的代码是累积算法的意外行为的简短样本(请参阅粗体值).实际上,这是一个类,它还包含每个值的日期.
C#计算偏差?排序打破累积链的行的算法?
建议有帮助,
[插入]
为了澄清,这是关于
性能在这个主题上非常重要的三件事.
第一种: 如果值遵循累积模式,则快速扫描.
第二:检查所有值是否合理偏差.
第三: 指出并进行错误处理.
这个问题是关于第一个和第二个问题.
我必须将值(C#中的double/float)转换为字节并需要一些帮助
.//数据类型长4byte -99999999,99到99999999,99
//数据类型长4byte -99999999,9到99999999,9
//数据类型短2byte -999,99到999,99
//数据类型短2byte -999,9到999,9
在我的"家里的世界"中我只是将它和ASCII.GetBytes()串起来.
但是现在,在这个世界上,我们必须减少可能的空间.
确实'-99999999,99'需要12个字节而不是4个字节!如果它是'long'数据类型.
[编辑]
由于一些帮助和答案,我在这里附上一些结果,
long lng = -9999999999L;
byte[] test = Encoding.ASCII.GetBytes(lng.ToString()); // 11 byte
byte[] test2 = BitConverter.GetBytes(lng); // 8 byte
byte[] mybyt = BitConverter.GetBytes(lng); // 8 byte
byte[] bA = BitConverter.GetBytes(lng); // 8 byte
Run Code Online (Sandbox Code Playgroud)
还有一个细节需要找出来.lng-variabel得到8字节,即使它保持较低的值,即99951(我不会包括ToString()样本).
如果该值甚至是"更短",这意味着-999,99 - 999,99它只需要2个字节的空间.
[结束编辑]
有没有任何一种数学方法可以将DateTime减少到精确的小时,一天左右?类似于小数点的圆形到int.
Period.Day
如果原始值是2011-01-01 13:00:00,它最终会进入2011-01-01 00:00:00
如果是Period.Hour
如果原始值是2011-03-11 13:32:00,它最终会进入2011-03-11 13:00:00
我想下面的事情.这当然可以正常工作,但是range后来无论如何都会重复使用-array.如果我可以直接在该迭代上计算,而不是自己的迭代,那就更好了.但someType不能放入该迭代(它取决于someType).
if (someType == Period.Day)
range.ForEach(d => d.time = new DateTime(d.time.Year, d.time.Month, d.time.Day,0,0,0));
if (someType == Period.Hour)
range.ForEach(d => d.time = new DateTime(d.time.Year, d.time.Month, d.time.Day, d.time.Hour, 0, 0));
Run Code Online (Sandbox Code Playgroud) 我发现自己陷入了CacheItem没有正确清理的状态.在查看MSDN并纠正自己使用基于Utc的计算时,我发现了这个令人困惑的信息:
AbsolutExpiration用来设置一个"保持活着"的CacheItem,Priority.NotRemovable用来强制CacheItem永远存在.没有关于哪个属性覆盖另一个属性的通知.
下面的代码进行编译,SQL Profiler也确认只查询一次数据库,而其他每个请求都来自缓存.
CacheItemPolicy _cachePolicy = new CacheItemPolicy()
{
AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)),
Priority = CacheItemPriority.NotRemovable
};
Run Code Online (Sandbox Code Playgroud)
我假设此代码强制缓存项目永久保留,但在创建12小时后清除,与MSDN关于该设置的注释一致.
"只有当缓存实现提供了从缓存中逐出条目并管理缓存条目数量的方法时,缓存实现才应为缓存条目设置NotRemovable优先级"
那么另一方面,为什么两个属性都可以一起工作?实现是否带来某种"更不可移动"?
你会写什么作为写一个aspx文件的绝对最小值?目的是强制.net处理程序运行.有时我想制作一个简短的手工代码来检查iis的功能.在较旧的语言中很容易.
HTML
Hello World
ASP
<% Response.Write("Hello World") %>
ASP.NET
这很好但是很笨拙 - 是的.
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello World!");
}
</script>
Run Code Online (Sandbox Code Playgroud)
但是,如果还检查版本,System.Environment.Version很不错.asp.net真的需要这些代码吗?这不是一个代码,你只是"手工打印只是为了检查".
下面的方法应该回答"小数精度,尾随数量的数量,这个(双重)值有什么?".当值看起来像5900.43,5900.043等时,我做对了.当方法收到5900.00时,它返回0,这是错误的(在我的需要).
/// <summary>
/// Return count of decimals after decimal-place
/// </summary>
private int getDecimalCount(double val)
{
int count = 0;
...
return count;
}
Run Code Online (Sandbox Code Playgroud)
参数'val'是(此方法的正常值的样本)
5900.00 return 2
5900.09 return 2
5900.000 return 3
5900.001 return 3
1.0 return 1
0.0000005 return 7
1.0000000 return 7
5900822 return 0
我的问题是计算.0 .00 .000等等
问题:
我该如何解决这个问题?如果这种方法不可能与双打,怎么回事?
[已编辑]
- 对文本进行较小修改以提出更明确的问题,
- 由于"小数位"的错误使用含义而导致的语言更正
我打赌这个任务有一个更短更好的方式来编写?
/// <summary>
/// Consumption between two parameters
/// </summary>
public double Consumed(double val1, double val2)
{
double currentValue = 0;
// Don't calculate backward
if (val1 < val2)
{
currentValue = val1;
val2 = val1;
val2 = currentValue;
}
currentValue = (val1 - val2);
return currentValue;
}
Run Code Online (Sandbox Code Playgroud)
如果是负面的,一种方法就是反转结果.你会说什么称为"最佳实践"?提前致谢,
所以在我的电脑上我只有Visual Studio 2010 Express.我需要编辑Visual Studio 2008项目,但需要将其保存在C#3.5中.
在我在2010年打开并意外升级之前,它会保留在2008还是C#3.5格式?
我意识到我无法使用.Net 2010功能,所以没问题.我只是想确定如果我使用2010年保存我的2008项目,我仍然可以在2008年打开它,它将正常工作.
我尝试放置一个异常逻辑,系统的一部分可以回退到意外的行为.
这项工作应该由一个新类来完成,该类继承Exception对象并使用新的"退出"扩展功能,该退出包括对用户的错误信号和日志记录例程.
我可能需要了解throw更好的使用,但我可以通过以下方式使其相当透明:
public SomeObject GetVersion(byte p)
{
switch ((SomeObject)p)
{
case Version.SomeType1:
...
break;
case Version.SomeType2:
...
break;
default:
throw new UnexpectedQueryException(this.someOtherObject, errorCode);
}
return (SomeObject)p;
}
Run Code Online (Sandbox Code Playgroud)
我想你可以看到我在这里想做什么.
当应用程序无法提供请求时,我会尝试抛出.throw用于通过异常执行执行(为调用者生成足够的错误代码).这个例子是"我知道你给我一个9但这里只允许1-8"的类型的错误,"errorCode进一步发送给UnexpectedQueryException(...).
不幸的是,应用程序将throw作为未处理并关闭我的Thread并且应用程序在重新启动之前将无法运行.除了这种情况,我也使用这个抛出catch语句.
在我看来,这是非常有效的.
这里有什么最佳做法?
我希望异常处理能够在不同场景(如上所述)上"回退",因此我总是有一种简单的方法将错误传达给用户(这意味着我可以发送有关异常位置的非常准确的信息) ).
此外,我当然希望应用程序继续工作.
Exception逻辑中的一部分代码,
public class UnexpectedQueryException: CommunicationException
{
public UnexpectedQueryException(SomeObject object, ErrorCode errorCode) : base("UnexpectedQueryException", object, errorCode)
{
.........
}
}
Run Code Online (Sandbox Code Playgroud)
反过来,它继承了基本的Exception对象,
public class CommunicationException : Exception
{
..some fields..
public CommunicationException(string Message, SomeObject object, ErrorCode errorcode)
{
.....
} …Run Code Online (Sandbox Code Playgroud) 我想在double类型的已知值数组中添加一种纹波.我指出这一点,因为Random.Next/Random.NextDouble()表现不同.
我如何才能最好地完成这项任务?
假设我在数组中有20个值,
List<double> arr = new List<double>() { 40, 40, 40, 40 ..... };
20个值在40的平均值,总共800,以使其更容易.
在这个方法之后,我希望整体总数仍然是800,但每个单独的值都应该修改.值应为正值,因为它们total+=i之后会添加.
到目前为止,使用给定数量的值的百分比来解决该问题.
1.0 / 20 = 0.05, then multiplicate that with the total and the iteration number. Then subtract the result from the remainder. Finally i just return a sort by new Guid().
正如您已经看到的,这种方法只是有点了不起,而只有5-20个值.就我今天的情况而言,这个数组需要有500-2000个值(每个值为0.2-0.05%).
相反,我希望有一个衍生物或类似物,以40的+ -x%为基础进行失真.或者,甚至可能更好,+ -x%对阵列中的任何单个值).
[UPDATE]
我将根据对此问题的回复添加更新问题.
Random rnd = new Random();
List<double> ripple = new List<double>();
int qty = bArray.Count();
double diff = last.Value …Run Code Online (Sandbox Code Playgroud)