为什么ToString()不能处理类型String,有什么解决方法?

时间:2018-03-20 11:41:15

标签: c# string-conversion

我正在从excel读取行到模型中,并且excel将输入(例如“10%”或“20%”)返回为“0.1”,“0.2”字符串。将该字符串转换为字符串(例如“20%”,“10%”)并避免不必要的转换的最佳方法是什么,以免损失性能?所以只是为了澄清我需要将字符串转换为字符串,但程序显然不让我。我可以将该字符串转换为double,然后将该double转换为使用ToString("#0.##%")的字符串,但我想知道是否有更快的方法。

这是读取行并将excel列格式化为模型道具类型的代码

static T ReadRow<T>(ExcelWorksheet worksheet, int rowNum)
    {
        var o = (T)Activator.CreateInstance(typeof(T));
        int colNum = 1;
        foreach (var p in typeof(T).GetProperties())
        {
            if (worksheet.Cells[rowNum, colNum].Value != null)
            {
                p.SetValue(o, Convert.ChangeType(worksheet.Cells[rowNum, colNum].Value, p.PropertyType));
            }
            colNum++;
        }
        return o;

2 个答案:

答案 0 :(得分:1)

扩展prachi所提供的解决方案,将字符串转换为您想要的结果。

string val = "0.2"; // for reference

string.Format("{0}%", Convert.ToDouble(val) * 100);

答案 1 :(得分:0)

你获得10%为.01的原因是该数字仅存储为.01,当读取excel时,你将得到它的实际存储值。您将其视为10%,因为它在excel中格式化为%。 要读取百分比:10%作为字符串'10%',您必须在阅读时格式化字符串。