如何使用 C# 解析科学格式的双精度数

发布于 2025-01-08 08:43:09 字数 370 浏览 1 评论 0原文

我从 FORTRAN 程序中输出了以下格式的数字:

 0.12961924D+01

如何使用 C# 将其解析为双精度?

我尝试了以下方法但没有成功:

// note leading space, FORTRAN pads its output so that positive and negative
// numbers are the same string length
string s = " 0.12961924D+01";
double v1 = Double.Parse(s)
double v2 = Double.Parse(s, NumberStyles.Float)

I have numbers outputted from a FORTRAN program in the following format:

 0.12961924D+01

How can I parse this as a double using C#?

I have tried the following without success:

// note leading space, FORTRAN pads its output so that positive and negative
// numbers are the same string length
string s = " 0.12961924D+01";
double v1 = Double.Parse(s)
double v2 = Double.Parse(s, NumberStyles.Float)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风尘浪孓 2025-01-15 08:43:09

我首先会对此字符串进行一些操作,将其从 FORTRAN 格式转换为 .NET 格式:

  • 修剪任何前导空格;如果负号在那里,我们想要它,但我们不想要空格。
  • 将“D”替换为“E”。

以下内容应该可以满足您的需求:

string s = " 0.12961924D+01";
s = s.Trim().Replace("D", "E");
//s should now look like "0.12961924E01"    
double v2 = Double.Parse(s, NumberStyles.Float);

I would first do some manipulation of this string to get it from FORTRAN to .NET formatting:

  • Trim any leading space; if the negative sign is there we want it but we don't want spaces.
  • Replace "D" with "E".

The below should get you what you need:

string s = " 0.12961924D+01";
s = s.Trim().Replace("D", "E");
//s should now look like "0.12961924E01"    
double v2 = Double.Parse(s, NumberStyles.Float);
执手闯天涯 2025-01-15 08:43:09

这应该有帮助:s = s.Replace(' ', '-').Replace('D', 'E');

This should help: s = s.Replace(' ', '-').Replace('D', 'E');

叹沉浮 2025-01-15 08:43:09

由于其他人都建议用减号替换空格,这看起来很疯狂,所以我将提供这个稍微简单的解决方案:

string input = " 0.12961924D+01";
double output = Double.Parse(s.Replace('D', 'E'));

Since everyone else suggests replacing the space with a minus sign, which seems crazy, I'll offer this somewhat simpler solution:

string input = " 0.12961924D+01";
double output = Double.Parse(s.Replace('D', 'E'));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文