尝试了this question的所有不同解决方案后,它似乎没有给我想要的格式(1.000.000 | 1.234)。
我试过这个:
dataBlock.ValueCell.Value = String.Format("{0:#.##0}", double.Parse(dataBlock.ValueCell.Value)); // 1 234
dataBlock.ValueCell.Value = String.Format("{0:N0}", double.Parse(dataBlock.ValueCell.Value)); // 1 234
dataBlock.ValueCell.Value = String.Format("{0}", double.Parse(dataBlock.ValueCell.Value.ToString("N0"))); // 1 234
//values as I read them from Excel = OLDVALUE
//values as I convert them to the wanted number format = NEWVALUE
//OLDVALUE == 2238,8
//NEWVALUE == 2 239
//OLDVALUE == -5372
//NEWVALUE == -5 372
//OLDVALUE == 3909,6
//NEWVALUE == 3 910
还有其他解决方案吗?
我可以用点替换空格,但这似乎是错误的代码。
edit1:我试过这个
dataBlock.ValueCell.Value = dataBlock.ValueCell.Value.ToString().Replace(' ', '.');
并且它给了我相同的输出,字符串格式怎么来代替不工作?
edit2:添加了Nikita的回答[作品]
var doubleValue = double.Parse(dataBlock.ValueCell.Value);
Console.WriteLine("doubleValue = " + doubleValue);
var formattedValue = doubleValue.ToString("N0", new CultureInfo("is-IS"));
Console.WriteLine("formattedValue = " + formattedValue);
dataBlock.ValueCell.Value = formattedValue;
给了我这个输出:
doubleValue = 29300
formattedValue = 29.300
doubleValue = 20300
formattedValue = 20.300
doubleValue = 32360
formattedValue = 32.360
doubleValue = 28300
formattedValue = 28.300
doubleValue = 9000
formattedValue = 9.000
...
edit3: Here更缺失'数据,以更好地了解情况
答案 0 :(得分:1)
添加额外步骤以验证double.Parse()
的工作原理。可能会有一些惊喜。其中一个可以是整数值和小数之间的分隔字符:,
或.
// step 1: verify your string taken from excel
var cellString = dataBlock.ValueCell.Value.ToString();
// if you have a blank space there, remove it
cellString = cellString.Replace(' ', '');
// step 2: verify your double converted value
var doubleValue = double.Parse(cellString);
Console.WriteLine("doubleValue = " + doubleValue);
// step 3: verify the formatting
var formattedValue = doubleValue.ToString("#.##0");
Console.WriteLine("formattedValue = " + formattedValue);
dataBlock.ValueCell.Value = formattedValue;
稍后在查看实际数据后进行修改: 您从单元格中获取的字符串中有一个空格。您可以通过添加其他步骤
来验证这一点