C# 将基础整数显示为定点小数的有效且正确的方法

C# 将基础整数显示为定点小数的有效且正确的方法,c#,C#,我使用的系统为我提供了一个表示1/10摄氏度的int值。我想将其格式化为以°C为单位的字符串,以显示给用户。基本上是一个函数,用于转换: int temperature = 2000; // => "200.0" 是否有一个内置的方法来实现这一点?我当前的实现如下所示: private string ConvertToFixedDecimalString(int value, int factorOfTen) { var valueString = val

我使用的系统为我提供了一个表示1/10摄氏度的
int
值。我想将其格式化为以°C为单位的字符串,以显示给用户。基本上是一个函数,用于转换:

int temperature = 2000; // => "200.0"
是否有一个内置的方法来实现这一点?我当前的实现如下所示:

    private string ConvertToFixedDecimalString(int value, int factorOfTen)
    {
        var valueString = value.ToString(NumberFormatInfo.CurrentInfo);
        if (Math.Abs(factorOfTen) > valueString.Length)
        {
            valueString = valueString.PadLeft(Math.Abs(factorOfTen) - valueString.Length, '0');
            valueString = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + valueString;
        }
        else if (factorOfTen > 0)
        {
            valueString = valueString.PadRight(factorOfTen, '0');
        }
        else
        {
            valueString = valueString.Insert(valueString.Length + factorOfTen,
                                             NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
        }
        return valueString;
    }
用作:

ConvertToFixedDecimalString(200, -1); // => "20.0"
ConvertToFixedDecimalString(200, -4); // => ".0200"
ConvertToFixedDecimalString(200, 1); // => "2000"
等等。。。但这似乎不雅观,如果我得到一个带有组分隔符的NumberFormatInfo,可能会引起问题

此外,我试图避免通过除法转换为
双精度
,因为在一般情况下,基本的
int
值是精确的(来自测量设备),我不想在显示中引入精度错误。

试试这个

public string ConvertToFixedDecimalString(int value, int factorOfTen)
{
    return (value * (decimal)Math.Pow(10, factorOfTen)).ToString();
}

这个问题似乎离题了,因为它属于不带除法的问题,我看不到一种内置的方法为什么不使用
NumberFormatInfo.InvariantInfo
?避免转换为
double
是正确的,因为这是一个二进制浮点数,精度损失将占主导地位(尽管不是前15位小数)。但是,请考虑转换为<代码>十进制< /代码>,就像@ MichaelLiu的评论一样。您也可以使用构造
十进制
,但在调用该构造函数之前,您必须手动处理符号(如果必须支持负值)和“缩放”(您的
因子)。你测试过这个方法吗?对于我使用的每一个有序的配对,它都工作得很好。