Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#String.Format()-数字格式不';行不通_C#_.net_Number Formatting_String.format - Fatal编程技术网

C#String.Format()-数字格式不';行不通

C#String.Format()-数字格式不';行不通,c#,.net,number-formatting,string.format,C#,.net,Number Formatting,String.format,在尝试了来自的所有不同解决方案后,它似乎没有给我想要的格式(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.Val

在尝试了来自的所有不同解决方案后,它似乎没有给我想要的格式(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:添加了尼基塔的答案[有效]

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:是更多“缺失”数据,以更好地了解情况

添加额外步骤以验证
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;
查看实际数据后再进行编辑:
从单元格中提取的字符串中有一个空格。您可以通过添加另一个步骤来验证这一点

可能是“是”的重复,这是我在第一句中的超链接中提到的,我已经尝试了那里的所有解决方案。为什么要使用Parse(),只使用字符串格式。@Nikita您是否选中了。ToString(“N”,new CultureInfo(“is”)??正是。这取决于文化。来自MSDN.:“将数字的字符串表示形式转换为指定的区域性特定格式”,因此这意味着这不会在每个系统上都起作用,这取决于您使用的语言或区域设置,例如,有时它会将其读取为1234,56,有时读取为1234.56?此外,此解决方案在格式字符串中给了我此输出错误,因为没有参数,
0:
必须删除。@tomab,仍然是相同的输出,因此您的问题中缺少一些信息。请添加单元格中的值。