【问题标题】:Convert decimal to double returns scientific notation将十进制转换为双精度返回科学计数法
【发布时间】:2020-07-22 07:20:54
【问题描述】:

我正在从 Excel 文件中读取数据,数据值为 0.0000000001。当它从 C# 中读取时,该值返回为 1E-10。单元格值为row.Cells[2].Value = 1E-10

我尝试从其他帖子中首先转换为小数:

decimal h1 = Decimal.Parse(row.Cells[2].Value.ToString(), System.Globalization.NumberStyles.Any);

这里h1 = 0.0000000001 符合预期。

我需要双倍的值,所以我做了:

Double val1 = Decimal.ToDouble(h1);

但是val1 现在又回到了 1E-10

如何将值保持为 double = 0.0000000001?

请测试以下代码的 sn-p 以说明问题所在:

十进制 t1 = Decimal.Parse("1E-10", System.Globalization.NumberStyles.Any); 双 t2 = Convert.ToDouble(t1);

您将看到 t1 = .0000000001 和 t2 = 1E-10

【问题讨论】:

  • 你不能 keep double as 0.0000000001,但你可以表示Console.Write(val.ToString("f10")); 这里f10 格式表示“小数点后10位"
  • 但我需要将一个双精度值传递给一个类。我真的不在乎它的样子。
  • 好吧,0.0000000001 == 1e-101e-101 乘以10-10th 次方)所以你什么也做不了;两个值相等
  • 我明白这一点,但下行蒸汽系统无法处理 1E-10。一定有解决办法。
  • 我认为您混淆了双 显示时的外观 以及 实际 值是什么。

标签: c# data-conversion


【解决方案1】:

1E-100.0000000001 相同

我还没有测试过,但也许这会有所帮助:

string variable = $"{val1:N10}";

【讨论】:

  • 我不需要字符串。我需要小数(这是正确的),当我转换为双精度时,它不是 1E-10,而是十进制值 .0000000001
【解决方案2】:

使用默认转换类

 Double val1 = Convert.ToDouble(h1)

并转换成字符串表示全数

Console.WriteLine(h1.toString("F10"))

F10 是你想要的小数格式

【讨论】:

  • 我对正确的字符串值不感兴趣。
  • 请尝试以下方法:decimal t1 = Decimal.Parse("1E-10", System.Globalization.NumberStyles.Any); Double t2 = Convert.ToDouble(priceConvert);
猜你喜欢
  • 1970-01-01
  • 2022-11-19
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多