- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 delphi 和 c# 之间转换代码。
值作为字符串存储在 delphi 应用程序的文本文件中。存储值的一个例子是:'4.42615029219009E-5'
现在,在我的 C# 应用程序中,我需要读入该字符串值,然后才能再次写出该值。最初我使用的代码类似于:
string stringField = "4.42615029219009E-5";
double someMoneyVar = Convert.ToDouble(stringField)
稍后如果我需要使用 someMoneyVar 的值重新创建文本文件,则使用一个简单的:
string.Format("{0}", someMoneyVar)
会输出:
4.42615029219009E-05 // note the 0
最后,我读到在 C# 中最好将钱存储为小数。我尝试使用 decimal.Parse(someMoneyVar, NumberStyles.Any)
将字符串值转换为小数,但是格式丢失了。
我需要输出的数据与输入的完全一样。
请注意,someMoneyVar 的值可能并不总是包含指数部分。例如0.0428860331919443。如果 someMoneyVar 的值没有指数部分,则该值将正确写入文本文件。
更新:
深入研究 delphi 的 FloatToStr 函数和帮助文件(将值存储在文本文件中)我得到了以下内容:
The resulting string uses fixed point format if the number of digits to the left of the decimal point in the value is less than or equal to the specified precision, and if the value is greater than or equal to 0.00001 (Edit: this should be 0.0001. There is an error in the delphi documentation). Otherwise the resulting string uses scientific format, and the Digits parameter specifies the minimum number of digits in the exponent (between 0 and 4).
...
If the section for positive values is empty, or if the entire format string is empty, the value is formatted using general floating-point formatting with 15 significant digits, corresponding to a call to FloatToStrF with the ffGeneral format. General floating-point formatting is also used if the value has more than 18 digits to the left of the decimal point and the format string does not specify scientific notation.
请记住,FloatToStr 函数调用 FloatToStrF 使用 15 个有效(精度)数字和 0 作为最小数字位数,因此我们最终与
4.42615029219009E-5
如果数字是 2 那么数字将显示为
4.42615029219009E-05
根据 MSDN http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString
使用通用格式说明符,double的精度为15,decimal为29
Fixed-point notation is used if the exponent that would result from expressing the number in scientific notation is greater than -5 and less than the precision specifier; otherwise, scientific notation is used. The result contains a decimal point if required, and trailing zeros after the decimal point are omitted. If the precision specifier is present and the number of significant digits in the result exceeds the specified precision, the excess trailing digits are removed by rounding.
However, if the number is a Decimal and the precision specifier is omitted, fixed-point notation is always used and trailing zeros are preserved.
If scientific notation is used, the exponent in the result is prefixed with "E" if the format specifier is "G", or "e" if the format specifier is "g". The exponent contains a minimum of two digits. This differs from the format for scientific notation that is produced by the exponential format specifier, which includes a minimum of three digits in the exponent.
The result string is affected by the formatting information of the current NumberFormatInfo object. The following table lists the NumberFormatInfo properties that control the formatting of the result string.
可以轻松设置精度,例如mydecimal.toString("G15") 但是我仍然没有找到一种方法来像在 delphi FloatToStrF 函数中一样轻松地设置“E”符号后的位数
最佳答案
如您所知,要将字符串转换为数字,只需使用 double
。不过,我会尝试不同的转换:
double myNum = double.Parse("<yournumber>", NumberStyles.AllowExponent | NumberStyles.Float, CultureInfo.InvariantCulture);
AllowExponent
和 Float
应该保留符号,InvariantCulture
负责小数分隔符(可能不是点,具体取决于语言环境)。
可以通过string.Format()
输出科学记数法,如下所示:
double num = 1234.5678; // 1.2345678e+03
string.Format("{0:e}", num); // should output "1.2345678E+03"
如果您必须区分带有和不带有“E+xx”部分的数字,则必须在将字符串转换为 double 之前搜索它,完整的代码段(警告:未经测试!)可能看起来像:
string myString = ReadNumberFromFile(); // Just a placeholder method
double myNum = double.Parse(myString, NumberStyles.AllowExponent | NumberStyles.Float, CultureInfo.InvariantCulture);
string output = string.Empty; //this will be the "converted-back number" container
if (myString.IndexOf("e", StringComparison.OrdinalIgnoreCase) >= 0)
{
//Number contains the exponent
output = string.Format("{0:e}", num); // exponential notation 'xxxExx' casing of 'e' changes the casing of the 'e' in the string
}
else
{
//TODO: Number does NOT contain the exponent
output = string.Format("{0:f}", num); // fixed-point notation in the form 'xxxx.xxx'
}
这里的要点是,就数字而言,有或没有指数没有任何区别,这只是表示的问题(区分它们毫无意义:它们确实是同一件事)。
关于c# - 如何将包含指数数的字符串转换为十进制数并返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663910/
如何根据 e(公钥)、d(私钥)和模数计算 p 和 q 参数? 我手边有 BigInteger 键,我可以将粘贴复制到代码中。一个公钥、一个私钥和一个模数。 我需要据此计算 RSA 参数 p 和 q。
如何在 JavaScript 中计算指数? 比如你会怎么做 12^2? 最佳答案 Math.pow() : js> Math.pow(12, 2) 144 关于JavaScript 指数,我们在Sta
也许是时候喝一杯咖啡了,但我看到了一个我没想到会看到的奇怪问题。 我正在阅读 JavaScript The Good Parts,在语法部分我看到以下内容: If a number literal h
我正在使用带有 eclipse link 2.3 &Derby db 的实体管理器 JPA,并且我有包含 10 个实体的模型,对于每个实体,我需要存储 1000 条记录,此过程大约需要 70 秒。我已
我习惯了制作 iPhone 应用程序,但现在我需要制作 Mac 应用程序。因此我必须切换到 Cocoa 框架。 有没有类似于 Cocoa 中的 array.index(of: ) 的东西? iOS 示
我正在尝试在控制台中打印文件名“xyz.0.html”。它吐出一个错误 "substring not found" 目录中的文件: xyz.0.html xyz.1.html xyz.2.html p
我需要计算 h-index来 self 存储在树中的出版物列表。 我所做的是按递减顺序遍历树,获取引用位置列表 看起来像: line 1 10 line 2 5 line 3 4 line 4 0 我
有没有一种更简单的方法将幂符号/指数符号转换为其等价数字(即从 ⁸ 到 8),而不仅仅是一堆 replace是吗? 编辑:谢谢大家的解决方案! 最佳答案 您可以创建一个正则表达式并执行一次 repla
我编写这段代码是为了查找指数 b 的最后一位数字,但 SPOJ 说它是错误的。我尝试了几乎所有的测试用例,但找不到错误。问题:http://www.spoj.com/problems/LASTDIG/
我对 CSS 中的 z-index 有疑问。 代码: div.banniere{ background-image:url('../img/banniere.png'); backgr
我有一个弹出的“对话框”小部件,其 z-index 为 100。当我创建另一个弹出窗口( float div)时,它出现在对话框小部件下方,因为我没有明确设置 z -新弹出窗口的索引。 结构最终看起来
我正在尝试从一篇学术论文中实现一个真相发现算法。它是一种流式算法,可以实时推断真相和源质量。如果有人有兴趣阅读本文,请在此处了解更多详细信息:http://dl.acm.org/citation.cf
这个问题在这里已经有了答案: Difference between Big-O and Little-O Notation (5 个答案) 关闭 8 年前。 直观上,nb = o(an)(o 是小哦
我在这里使用 sklearn 制作了一个决策树,在 SciKit learn DL 包下,即。 sklearn.tree.DecisionTreeClassifier().fit(x,y)。 如何在每
为了解释这一点,这基本上是一种将浮点向量数据缩小为 8 位或 16 位有符号或无符号整数的方法,该整数具有单个公共(public)无符号指数(最常见的是 bs16 以 11 为常用指数的精度)。 我不
是否可以在 Algolia 中“加入”索引?获得合并结果? 例如: 如果我有两个索引:一个用于“用户”,一个用于“事件”。每个用户都有 id 和 name 属性。每个事件都有 date 和 userI
有人可以提供一个关于如何在 pytorch 中为语义分割计算 IoU(交集对联合)的玩具示例吗? 最佳答案 我在某处找到了它并为我改编了它。如果我能再次找到它,我会发布链接。抱歉,如果这是重复的。 这
我正在将 NativeBase 与指数一起使用。标题位于手机的状态栏下方。您可以在 NativeBase 中看到这一点指数发布的演示。 有没有人解决这个问题? 最佳答案 由于此问题仅在 Android
基本上,有20只羊为一组。当羊群发展到80只羊后,就不再需要有人看管了。每年 t 的羊数量 N 可以通过以下公式找到: N = 220/(1 + 10(0.83)^t) 该程序试图找出羊需要被监管多少
我正在尝试编写一个 SPARQL 查询,我想在其中过滤某些内容的平方,但我根本无法弄清楚如何计算数字的平方(x2)(当然,除了将其与自身相乘之外)。我猜想有一个名为 math:sqrt() 的平方根函
我是一名优秀的程序员,十分优秀!