【问题标题】:Converting "2.800000000000000e+001" to ""28" in ASP.NET在 ASP.NET 中将“2.800000000000000e+001”转换为“28”
【发布时间】:2013-06-07 07:19:36
【问题描述】:

这是任何 Web 服务接收到的 XML,

 <diy>
      <tag1>14</tag1>
      <tag2>2.000000000000000e+000</tag2>
      <tag3>2.800000000000000e+001</tag3>
 </diy>

这是代码:

IEnumerable<XElement> xTag = from p in xmlDoc.Elements("document").Elements("xServ").Elements("b")
                                                 select p;
            string tab = "<Table>";


            foreach (var xTags in xTag)
            {
                tab += "<tr><td>" + Convert.ToString(xTags.Element("r").Element("Exp").Value) + "</td>";
                tab += "<td>" + Convert.ToString(xTags.Element("r").Element("diy").Element("tag1").Value) + "</td>";
                string s = Convert.ToString(xTags.Element("r").Element("diy").Element("tag2").Value);
                string d = Math.Round(Convert.ToDouble(s)).ToString();
                tab += "<td>" + d + "</td>";
                tab += "<td>" + Convert.ToString(xTags.Element("r").Element("diy").Element("tag3").Value) + "</td>";
                tab += "</tr>";

            }
            divTag.InnerHtml = tab + "</Table>";

当我使用 Math.Round() 时,它给了我“2,8E+16”!

如何在 ASP.NET 中将“2.000000000000000e+000”转换为“2”和“2.800000000000000e+001”转换为“28”?

【问题讨论】:

  • diy 是类,tag1,tag2,tag3 是成员?如果成员,那么哪种类型,即浮动或?。在网络服务类中
  • @dash:因为指数:2.0*10^0 = 2, 2.8*10^1 = 28。
  • 这是 xml 文档的一部分。我没有生成,我是通过网络服务接收到的
  • 结果是整数还是浮点数?
  • 我在函数中使用这些,即 14 * 2 = 28。所以,它们应该是整数。

标签: asp.net xml string int


【解决方案1】:

使用Math库:

Math.Round(Convert.ToDouble("2.800000000000000e+001")).ToString();

这将返回“28”。

【讨论】:

  • 如果我运行您的代码,我会得到值“28.0” - 即输出是双精度 - 您仍然需要对其进行格式化以删除小数位。
  • @dash Math.Round(Convert.ToDouble("2.800000000000000e+001")).ToString();!
  • 为我返回 "28" :-)
【解决方案2】:

这个怎么样:

decimal.Parse("2.800000000000000e+001", System.Globalization.NumberStyles.Float).ToString("0.#");

编辑:添加 .NET 格式字符串以减少到“28”

【讨论】:

  • 这个返回 28.0000000000000 !
【解决方案3】:
public static int function(float tag2)
{
 do
 {
  if(tag2%10==0)
  {
   tag2=tag2/10.0;
  }
  else
  {
   int res = tag2;
   return res;
  }
 }
 while(true)
}

【讨论】:

    【解决方案4】:

    好吧,我不得不说我的解决方案有点搞笑!除此之外,它比其他方式使用更多的内存。尽管其他解决方案使用更多的 cpu!生命是权衡!

            string MyNumber = "2.8000000e+1";
            int DotIndex = MyNumber.IndexOf('.');
            MyNumber = MyNumber.Remove(DotIndex, 1);
            if(MyNumber[DotIndex] != '0')
              DotIndex++;
            MyNumber = MyNumber.Remove(DotIndex, MyNumber.Length - DotIndex);
            DotIndex = Int32.Parse(MyNumber);
            //MessageBox.Show(MyNumber); just to show the result!
    

    对于像“2.00000000e+1”这样的输入,它将返回“2”,对于“2.8000000e+1”,它将返回“28”!

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2017-12-28
      • 2012-04-14
      • 1970-01-01
      相关资源
      最近更新 更多