gpt4 book ai didi

c# - 为什么#.# 不适用于非常小的数字?

转载 作者:太空狗 更新时间:2023-10-29 23:26:04 24 4
gpt4 key购买 nike

在我的程序中,我遇到了将一个小数字写入 context.Response 的问题,然后由 jQuery ajax 响应读取该响应。

value = -0.00000015928321772662457;
context.Response.Write(value.ToString("#.#"));

返回 [对象 XMLDocument]

但是,

context.Response.Write(value.ToString("n"));

按预期返回 0.00。

使用“n”对我的程序来说完全没问题,但为什么“#.#”会返回一个 XMLDocument?

最佳答案

它显示类型名称可能是因为 ToString() 返回 null,所以它必须显示其他内容。您会在 Visual Studio 的本地面板中看到类似的行为:

  1. 启动一个新的控制台应用程序项目并替换 Program 类:

      class Program {
    static void Main() {
    var a = new Program( "asdf" );
    var b = new Program( "" );
    var c = new Program( null );
    } // <-- breakpoint here

    string _data;
    public Program( string data ) {
    _data = data;
    }

    public override string ToString() {
    return _data;
    }
    }
  2. Main() 的右大括号 (}) 处设置断点并运行项目。

  3. 现在看看本地面板。 Visual Studio 会尝试对对象调用 ToString() 以显示此面板上“值”列中大括号之间的内容。然而,因为一个实例返回 null,显然有一个获取类型名称的回退:

    a      {asdf}
    b {}
    c {ConsoleApplication1.Program}

我认为 context.Response.Write() 正在做类似的事情。它在内部使用 TextWriter,下面是您的 "#.#" 问题中发生的一些过程:

  1. value.ToString("#.#"),不像value.ToString("#.0"),返回一个空字符串("") 因为没有非零数字来填充格式模板(这比返回 "." 更好)。

  2. TextWriterWrite(string) 方法调用ToCharArray(),将其传递给Write( char[]),当然什么也不写。

响应总是向客户端生成一个 XMLDocument,因为 XML 是 AJAX 传输请求和响应的方式——即使是正确的 "0.00" 也是在 XML 中传输的.在这和您的 jQuery 收到响应之间的某处,某些东西决定在处理时应该替换一个空的 XMLDocument。甚至可能是 jQuery 本身在做那件事,但我对 ASP.NET 管道或 jQuery 的了解还不足以找到位置。

很明显,空的 AJAX 响应不是很好。

关于c# - 为什么#.# 不适用于非常小的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com