我有一个输入类型整数,表示需要在1-100之间转换为double的数字,其余为小数精度。
示例:1562 - > 15.62; 198912 - > 19.8912
现在,我尝试转换为字符串,计算字符数,取2来检查我有多少小数,并根据结果"创建"一个复合字符串,以获得有效的双...
任何想法都有更好的方法来解析运行时的转换精度。
答案 0 :(得分:2)
您可以使用LINQ Skip
和Take
,如:
string str = "198912";
string newStr = string.Format("{0}.{1}", new string(str.Take(2).ToArray()), new string(str.Skip(2).ToArray()));
double d = double.Parse(newStr, CultureInfo.InvariantCulture);
您可以在原始字符串上添加长度检查,也可以使用double.TryParse
查看是否获得有效值。
如果您开始使用int
,则可以使用decimal
,这将为您提供更准确的转化。像:
int number = 1562123123;
decimal decimalNumber = number;
while (decimalNumber > 100)
{
decimalNumber /= 10;
}
答案 1 :(得分:2)
这个怎么样:
int value = 1562;
decimal d = value;
while (d > 100) {
d /= 10;
}
答案 2 :(得分:1)
这是一个数学解决方案。行lg = Math.Max(lg, 0);
更改“2”以返回“2.0”而不是“20.0”,但我想这取决于您对单个数字的需求。
static double ToDoubleBetween1And100(int num)
{
var lg = Math.Floor(Math.Log10(num)) - 1;
lg = Math.Max(lg, 0);
return ((double)num) / Math.Pow(10, lg);
}