C# 如何将double格式化为字符串并获取文本值

C# 如何将double格式化为字符串并获取文本值,c#,excel,C#,Excel,我希望sDbl的值为-0.000023,没有任何自定义格式 Double dbl = -0.000023; //value stored as -0.000023 String sDbl = ConvertToString(dbl); //sDbl has value of "-2.3E-05" String ConvertToString(Object value) { if(value != null) return value.T

我希望sDbl的值为-0.000023,没有任何自定义格式

Double dbl = -0.000023;              //value stored as -0.000023  
String sDbl = ConvertToString(dbl);  //sDbl has value of "-2.3E-05"  


String ConvertToString(Object value)  
{
  if(value != null)  
    return value.ToString();    
  else  
    return String.Empty  
} 

您可以将选择的任何格式说明符用于:

例如,上面使用了应该给出结果的。您还可以使用对输出进行更多控制

根据评论进行编辑:


根据您的注释,获取实际键入文本的唯一方法是直接将变量存储为字符串而不是双精度字符串,或者解析源代码本身,这可以通过。用于指定数字的格式不是程序编译输出的一部分。

如果要从excel单元格中获取数据,作为单元格当前格式的字符串表示,可以使用Range对象的Text属性,而不是Value2属性。

无需任何自定义格式,您的确切含义是什么。我们给出的任何解决方案都将涉及某种格式。如果第一行实际上是双dbl=-2.3e-5怎么办-正如@paxdiablo所暗示的,您在代码中使用的格式是不相关的。您可以将其写成-2.3e-5、-0.000023或-0.000023,并且在任何情况下,都会将完全相同的值存储到dbl。如果你在寻找一种总是使用定点而不是指数表示法的格式,好吧,但是如果你需要原始格式,你需要使用字符串,或者带双精度的字符串,而不仅仅是双精度的。如果行是Double dbl=-2.3e-5,那么我想要-2.3e-5好的,那么你不能使用Double,因为它不存储输入格式。使用字符串。默认情况下N不给您两位小数吗?如果是这样,您可能需要N7或其他东西。@paxdiablo我相信这是特定于文化的。不过,为了以防万一,添加了。@paxdiablo刚刚将其切换到R,这实际上很可能更接近OP想要的值。数据是通过使用get_Range从Excel中读取的,在excel中,单元格的格式为文本,但excel返回一个二维对象数组,每个值不是设置为字符串,而是根据其值设置为适当的数据类型。我盲目地将一个ToString放在值上,当它出现在screen@user1713000如果你只得到一个double,你已经失去了它最初的格式细节。您可以选择以默认方式格式化它,或不使用指数表示法,或以其他各种方式格式化它,但如果您确实需要知道什么是Excel,则需要执行一些操作,以便实际获取原始字符串并对其进行处理。Text属性返回DBNull值,不是一个2维数组,一次只能获取一个.Text值Excel.RangeXLWorker.Cells[x,y].Text这会降低性能。我不敢相信没有有效的方法从excel中获取数据,因为单元格的格式是真实的性能将很差excel没有在内部存储可见的格式值-它会根据需要动态生成它。。。但是,如果您想获取格式化的字符串值,我怀疑检索值和格式,然后使您的代码以与Excel相同的方式格式化值会更快。但是,如果用户已将单元格值显式格式化为文本,那么为什么Excel会返回其推断的数据类型而不是用户设置的数据类型。我甚至尝试使用带有IMEX=1选项的OLEDB,结果也一样
string sDbl = dbl.ToString("R");