相关疑难解决方法(0)

从指数表示法解析数字

我需要将字符串"1.2345E-02"(以指数表示法表示的数字)解析为十进制数据类型,但Decimal.Parse("1.2345E-02")只是抛出一个错误

.net c# exponent number-formatting

81
推荐指数
7
解决办法
7万
查看次数

如何将包含指数数字的字符串转换为十进制并返回到字符串

我在delphi和c#之间转换代码.
值作为字符串存储在delphi应用程序的文本文件中.存储值的示例是:'4.42615029219009E-5'

现在在我的c#app中,我需要读取该字符串值,然后才能再次写出该值.最初我使用的代码类似于:

string stringField = "4.42615029219009E-5";
double someMoneyVar = Convert.ToDouble(stringField)
Run Code Online (Sandbox Code Playgroud)

稍后如果我需要使用someMoneyVar的值重新创建文本文件,那么使用简单的:

string.Format("{0}", someMoneyVar)
Run Code Online (Sandbox Code Playgroud)

输出:

4.42615029219009E-05 // note the 0
Run Code Online (Sandbox Code Playgroud)

最后,我读到最好将钱存入c#作为小数.我试图将字符串值转换为小数decimal.Parse(someMoneyVar, NumberStyles.Any),但格式化将丢失.

我需要输出的数据与输入完全一致.

注意,someMoneyVar的值可能并不总是包含指数部分.例如0.0428860331919443.如果someMoneyVar的值没有指数部分,则该值将正确写入文本文件.

更新:
深入研究delphi的FloatToStr函数和帮助文件(这是将值存储在文本文件中)我带有以下内容:

如果值中小数点左侧的位数小于或等于指定的精度,并且该值大于或等于0.00001,则结果字符串使用定点格式(编辑:此值应为0.0001 .delphi文档中有错误).否则,结果字符串使用科学格式,Digits参数指定指数中的最小位数(0到4之间).
...
如果正值部分为空,或者整个格式字符串为空,则使用具有15位有效数字的常规浮点格式对值进行格式化,对应于使用ffGeneral格式调用FloatToStrF.如果值小数点左侧的值超过18位且格式字符串未指定科学记数法,也会使用常规浮点格式.

因此,请记住FloatToStr函数调用FloatToStrF时使用15个有效(精确)数字和0作为最小数字位数,因此我们最终得到

4.42615029219009E-5

如果数字是2则数字将显示为

4.42615029219009E-05

根据 使用通用格式说明符的MSDN http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString,double
的精度为15,十进制为29

如果用科学记数法表示数字所得的指数大于-5且小于精度说明符,则使用定点表示法; 否则,使用科学记数法.如果需要,结果包含小数点,并且省略小数点后的尾随零.如果存在精度说明符且结果中的有效位数超过指定的精度,则通过舍入删除多余的尾随数字.

但是,如果数字是十进制并且省略精度说明符,则始终使用定点表示法并保留尾随零.

如果使用科学记数法,如果格式说明符为"G",则结果中的指数以"E"为前缀,如果格式说明符为"g",则以"e"为前缀.指数至少包含两位数.这与由指数格式说明符生成的科学计数法格式不同,指数格式说明符包含指数中至少三位数.

结果字符串受当前NumberFormatInfo对象的格式设置信息的影响.下表列出了控制结果字符串格式的NumberFormatInfo属性.

可以轻松设置精度,例如mydecimal.toString("G15")但是我还没有找到一种方法来设置'E'符号后面的位数,就像delphi FloatToStrF函数一样容易

.net c# decimal exponent

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

.net ×2

c# ×2

exponent ×2

decimal ×1

number-formatting ×1