C# 将基础整数显示为定点小数的有效且正确的方法
我使用的系统为我提供了一个表示1/10摄氏度的C# 将基础整数显示为定点小数的有效且正确的方法,c#,C#,我使用的系统为我提供了一个表示1/10摄氏度的int值。我想将其格式化为以°C为单位的字符串,以显示给用户。基本上是一个函数,用于转换: int temperature = 2000; // => "200.0" 是否有一个内置的方法来实现这一点?我当前的实现如下所示: private string ConvertToFixedDecimalString(int value, int factorOfTen) { var valueString = val
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的评论一样。您也可以使用构造十进制
,但在调用该构造函数之前,您必须手动处理符号(如果必须支持负值)和“缩放”(您的因子)。你测试过这个方法吗?对于我使用的每一个有序的配对,它都工作得很好。