刷新浮点(也是PDF),IEEE-754并参与有关转换为字符串时浮点舍入的讨论,让我修补一下:如何获得给定浮点数的二进制表示的最大值和最小值是平等的.
免责声明:对于本次讨论,我喜欢坚持IEEE-754所描述的32位和64位浮点.我对扩展浮点(80位)或四边形(128位IEEE-754-2008)或任何其他标准(IEEE-854)不感兴趣.
背景:计算机不能0.1用二进制表示来表示.在C#中,float表示3DCCCCCD内部(C#使用round-to-nearest)和double表示3FB999999999999A.相同的位模式用于十进制0.100000005(float)和0.1000000000000000124(double),但不用于0.1000000000000000144(double).
为方便起见,以下C#代码给出了这些内部表示:
string GetHex(float f)
{
return BitConverter.ToUInt32(BitConverter.GetBytes(f), 0).ToString("X");
}
string GetHex(double d)
{
return BitConverter.ToUInt64(BitConverter.GetBytes(d), 0).ToString("X");
}
// float
Console.WriteLine(GetHex(0.1F));
// double
Console.WriteLine(GetHex(0.1));
Run Code Online (Sandbox Code Playgroud)
在这种情况下0.1,没有用相同的位模式表示的低十进制数,任何0.99...99将产生不同的位表示(即,在内部为0.999999937yield产生浮点数3F7FFFFF).
我的问题很简单:如何找到内部存储在同一二进制表示中的给定float(或double)的最低和最高十进制值.
为什么 :(我知道你会问)在转换为字符串时从.NET中舍入时发现错误,当它从字符串转换时,找到内部精确值并更好地理解我自己的舍入错误.
我的猜测是这样的:取尾数,移除其余部分,得到其精确值,得到一个(尾数位)更高,并计算平均值:低于该值的任何东西将产生相同的位模式.我的主要问题是:如何将小数部分作为整数(位操纵它不是我最强的资产).Jon Skeet的DoubleConverter课程可能会有所帮助.
从HTML源视图中创建一个按钮,创建代码隐藏(webforms)事件处理程序的最简单方法是什么?
在VB.NET中,很容易切换到页面后面的代码,并使用顶部的对象和事件组合框来选择和创建.
在c#中缺少那些(我真的不喜欢设计视图).
自从我发现汽车房产以来,我试着到处使用它们.以前我会在课堂上使用的每个属性都会有一个私人成员.现在这被auto属性所取代.我通常使用普通成员字段的方式在我的类中使用该属性.问题是该属性以国会大厦开始,这使得在以这种方式使用它时看起来有点奇怪.我之前并不介意属性从国会大厦开始,因为它们总是落后于"点".现在我发现自己在内部添加了我内部使用的所有属性this.,以此来抚慰我的感觉.
我的困境是,在我总是有点反对使用内部成员的所有用法前缀this.,除非"必要"(如在setter或构造函数中).所以我有点想找到第二个意见.有没有一个标准的好方法来做到这一点?我应该停止抱怨(我倾向于成为"蚂蚁驼背"(荷兰语表达))?
之前:
class Foo
{
private Bar bar;
public Bar Bar { get { return bar; } }
public Foo(Bar bar)
{
this.bar = bar;
}
public void DoStuff()
{
if(bar != null)
{
bar.DoMethod();
}
}
}
Run Code Online (Sandbox Code Playgroud)
后:
class Foo
{
public Bar Bar {get; private set;}
public Foo(Bar bar)
{
this.Bar = bar;
// or
Bar = bar;
}
public void DoStuff()
{
if(this.Bar != null)
{
this.Bar.DoMethod();
}
// or
if(Bar != …Run Code Online (Sandbox Code Playgroud) 我发现自己需要根据相对于正在运行的ASP.NET Web应用程序的物理位置的文件来配置log4net.我们希望尽早启动记录器,所以Application_Start似乎是一个合适的地方.在IIS6中,这工作正常并且已经运行了很长时间,但现在我们转移到IIS7,这将不再起作用:
string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath;
Run Code Online (Sandbox Code Playgroud)
因为HttpContext.Current在许多global.asax(应用程序,会话)事件中不可用.这是旧闻,我们都知道它引发了现在臭名昭着的请求在此上下文错误中不可用.我们不想回到经典模式.
现在,问题很简单:没有使用HttpContext,是否可以找到当前运行的Web应用程序实例的物理位置?
根据VS中Code Code的建议来调用一个对象上的Dispose(我之前并不是这样)我最终得到了一个包含这个的方法:
using (var favicon = new HtmlLink
{
Href = "~/templates/default/images/cc_favicon.ico"
})
{
favicon.Attributes.Add("rel", "shortcut icon");
Header.Controls.Add(favicon);
}
Run Code Online (Sandbox Code Playgroud)
这让我有点困惑,如果我将这个对象添加到Controls集合之后处理这个对象是个好主意吗?
这怎么样仍然有效?是因为Controls.Add方法在使用后处理对象而不是坚持它?
我使用以下代码:
Assembly.LoadFile("the assembly in another folder");
var type = Type.GetType("the full name of the type");
Run Code Online (Sandbox Code Playgroud)
尽管在这行代码之前已经加载了程序集,但它总是返回null type.
PS:我确实传递了程序集限定名,包括名称空间,类型名称,程序集名称,版本和公共令牌.
我正在使用Random函数编写一个小的Heads或Tails程序,并接收一个Unable来强制转换'System.Random'类型的对象来输入'System.IConvertible'消息,我不知道为什么.有人可以轻松一点.谢谢.
protected void Button1_Click(object sender, EventArgs e)
{
Random rNum = new Random();
rNum.Next(2, 47);
int rrNum = Convert.ToInt32(rNum);
string result;
result = (rrNum % 2 == 0) ? "Heads" : "Tails";
lblResult.Text = result;
}
Run Code Online (Sandbox Code Playgroud) 在TeamCity构建中,我看到一堆(大约80到120左右)的行看起来完全像下面的那样(只有时间戳改变),我不知道他们做了什么或如何解决它们(构建总计成功):
[05:58:44] [步骤1/3]目标"MvcBuildViews"在"C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web"的BeforeTargets属性中列出. Publishing.targets(839,131)"在项目中不存在,将被忽略.
或者,没有记录器垃圾的更短形式:
项目中不存在
BeforeTargets属性Microsoft.Web.Publishing.targets(839,131)中列出的目标"MvcBuildViews" ,将被忽略.
除了奇怪的是他们出现并且反复重复,最近在列表中间的某个地方,时间差距很大:
[05:58:44] [步骤1/3]目标"MvcBuildViews"[...]
[06:19:38] [步骤1/3]目标"MvcBuildViews"[...]
导致我们的构建总共运行大约30分钟而不是"正常"运行大约5分钟左右.
谷歌搜索这个消息没有给我任何打击,所以我估计我解决这个问题的机会相当渺茫,但如果有人之前遇到过这个,并且知道是什么导致了这个,我会非常有兴趣知道一个解决方案.
这个项目是用VS 2010构建的(是的,我们需要更新,真的),TeamCity的版本是9.1.3.
PS:暗示这个警告可能带来什么(除了显然与MVC有关)以及从哪里开始寻找解决方案当然同样受欢迎;)
我现在很少用F#进行这种斗争,但是再次类型继承与F#相比并不常见,所以也许我只是幸运.或者我错过了显而易见的事实.通常当编译器抱怨不知道某种类型时,我会反转管道或合成操作数的顺序,而且我已经完成了.
基本上,给定一个函数调用g(f x),它也可以作为x |> f |> g或(f >> g) x.但今天它不......
这是我的意思的一个混乱的概念证明:
module Exc =
open System
type MyExc(t) = inherit Exception(t)
let createExc t = new MyExc(t)
type Ex = Ex of exn
type Res = Success of string | Fail of Ex with
static member createRes1 t = Ex(createExc(t)) |> Fail // compiled
static member createRes2 t = t |> createExc |> Ex |> Fail // FS0001
static member createRes3 = createExc >> …Run Code Online (Sandbox Code Playgroud)