将带有指数表示法的数字从字符串转换为双精度或十进制

发布于 2024-12-12 02:05:49 字数 342 浏览 4 评论 0原文

有没有一种快速方法将指数表示法的数字(例如:“0.5e10”或“-5e20”)转换为十进制或双精度?

更新:我发现从指数中解析数字符号,但除非我指定一种文化,否则这些示例对我不起作用。

解决方案:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);

Is there a fast way to convert numbers with exponential notation (examples: "0.5e10" or "-5e20") to decimal or double?

Update: I found Parse a Number from Exponential Notation but the examples won't work for me unless I specified a culture.

Solution:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);

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

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

发布评论

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

评论(4

夜还是长夜 2024-12-19 02:05:49

如果您的文化使用 . 作为小数点分隔符,则只需 double.Parse("1.50E-15") 即可。

如果您的文化使用其他内容(例如 ),或者您想确保您的应用程序在每台计算机上都以相同的方式运行,则应使用 InvariantCulture

double.Parse("1.50E-15", CultureInfo.InvariantCulture)

If your culture uses . as the decimal separator, just double.Parse("1.50E-15") should work.

If your culture uses something else (e.g. ,) or you want to make sure your application works the same on every computer, you should use InvariantCulture:

double.Parse("1.50E-15", CultureInfo.InvariantCulture)
简单气质女生网名 2024-12-19 02:05:49

标准 double.Parsedecimal.Parse 方法在这里完成工作。

示例:

// AllowExponent is implicit
var number1 = double.Parse("0.5e10");
Debug.Assert(number1 == 5000000000.0);

// AllowExponent must be given explicitly
var number2 = decimal.Parse("0.5e10", NumberStyles.AllowExponent);
Debug.Assert(number2 == 5000000000m);

另请参阅 MSDN 文章解析数字字符串< /a> 了解更多信息。只要为 Parse 方法指定了 NumberStyles.AllowExponent 选项(默认情况下为 double),解析此类字符串就可以工作美好的。

注意:正如提问者所指出的,例如“e10”的指数表示法并不适用于所有文化。然而,指定 en-US 文化可确保其有效。我怀疑 CultureInfo.InvariantCulture 也应该能解决问题。

The standard double.Parse or decimal.Parse methods do the job here.

Examples:

// AllowExponent is implicit
var number1 = double.Parse("0.5e10");
Debug.Assert(number1 == 5000000000.0);

// AllowExponent must be given explicitly
var number2 = decimal.Parse("0.5e10", NumberStyles.AllowExponent);
Debug.Assert(number2 == 5000000000m);

Also, see the MSDN article Parsing Numeric Strings for more information. As long as the NumberStyles.AllowExponent option is specified to the Parse method (which it is by default for double), parsing such strings will work fine.

NB: As the questioner points out, the exponential notation of "e10" for example does not work in all cultures. Specifying en-US culture however ensures that it works. I suspect CultureInfo.InvariantCulture should also do the trick.

酷遇一生 2024-12-19 02:05:49

@Noldorin 是正确的尝试这个代码:

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);

@Noldorin is correct try this code:

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);
拥抱影子 2024-12-19 02:05:49

Math.Round做得好的话,它会重新渲染数字,以便将其删除,以下是如何使用它:

Math.Round(Double.Parse("3,55E-15"),2)

the Math.Round does it well, it will reder the number so that will remove, here is how to use it:

Math.Round(Double.Parse("3,55E-15"),2)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文