将基础 int 显示为定点小数的高效且正确的方法
本文关键字:高效 方法 小数 int 显示 | 更新日期: 2023-09-27 18:31:53
我正在使用一个系统,它为我提供了一个代表 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"
等等...但这似乎不优雅,如果我获得具有组分隔符的数字格式信息,可能会导致问题。
此外,我试图避免通过除法转换为double
,因为在一般情况下,基础int
值是精确的(来自测量设备),我不想在显示器中引入精度误差。
试试这个。
public string ConvertToFixedDecimalString(int value, int factorOfTen)
{
return (value * (decimal)Math.Pow(10, factorOfTen)).ToString();
}