提问人:KiraKo 提问时间:1/26/2023 最后编辑:NetMageKiraKo 更新时间:1/26/2023 访问量:25
使用哪些 NumberStyles 才能进行正确的数字转换?
Which NumberStyles to use in order to have the right number conversion?
问:
我正在从 excel 工作表中读取值。 单元格的正确值是 -0.09,但 excel 将其读取为“-9.9.329999999999999994E-2” 我创建了一个处理区域设置(数字格式的逗号和句点)的方法,以正确转换值并处理Excel误解。
一切都很好,直到我通过 NumberStyles 进行转换的最后一条指令 最后一条指令的结果是 -933 而不是 -0.09
为了得到正确的答案,我需要做些什么改变?
static void Main(string[] args)
{
String data = "-9.3299999999999994E-2";
double number = 0.0;
string s = Regex.Replace(data, @"\s", "");
//Handle scientif Notation Coming from Excel e.g: 1.234567E-06
if (s.ToUpper().Contains("E"))
{
try
{
number = double.Parse(s.Trim(), CultureInfo.InvariantCulture);
s = number.ToString();
}
catch (FormatException e)
{
throw new FormatException();
}
}
var cultureInfo = CultureInfo.InvariantCulture;
// if the first regex matches, the number string is in us culture
if (Regex.IsMatch(s, @"^(:?[\d,]+\.)*\d+$"))
{
cultureInfo = new CultureInfo("en-US");
}
// if the second regex matches, the number string is in de culture
else if (Regex.IsMatch(s, @"^(:?[\d.]+,)*\d+$"))
{
cultureInfo = new CultureInfo("de-DE");
}
NumberStyles styles = NumberStyles.Number ;
bool isDouble = double.TryParse(s.Trim(),styles, cultureInfo, out number);
if (!isDouble) //if conversion fails
throw new FormatException();
System.Console.WriteLine ( number );
}
答: 暂无答案
评论
string
s