C# 将double转换为long而不截断
如何将double转换为long而不截断它 比如说, 我希望-26.3999745变成-263999745 到目前为止,我尝试过的方法,如C# 将double转换为long而不截断,c#,C#,如何将double转换为long而不截断它 比如说, 我希望-26.3999745变成-263999745 到目前为止,我尝试过的方法,如Convert.ToInt64()截断数字 编辑: 小数位数各不相同,如果您确实确定这是您真正想要的,则某些数字可能有5位小数 long.Parse((-26.3999745).ToString().Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToString()
Convert.ToInt64()
截断数字
编辑:
小数位数各不相同,如果您确实确定这是您真正想要的,则某些数字可能有5位小数
long.Parse((-26.3999745).ToString().Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToString(), string.Empty)))
以下两个步骤
n
10^n
static int GetCountAfterDecimal(double number)
{
int count = 0;
string seperator = System.Globalization.CultureInfo.CurrentCulture
.NumberFormat.NumberDecimalSeparator;
string numberAsString = number.ToString();
int indexOfSeperator = numberAsString.IndexOf(seperator);
if (indexOfSeperator >= 0)
count = numberAsString.Length - indexOfSeperator - 1;
return count;
}
static long RemoveDecimalPoint(double number, int numbersCountAfterDecimal)
{
return (long)(number * Math.Pow(10, numbersCountAfterDecimal));
}
static void Main(string[] args)
{
double number = -26.3999745;
long result = RemoveDecimalPoint(number, GetCountAfterDecimal(number));
Console.WriteLine(result);
}
这可能对你有用
double YourNumber = -26.3999745;
int DecimalPlacesCount = BitConverter.GetBytes(decimal.GetBits(Convert.ToDecimal(YourNumber))[3])[2];
long number = Convert.ToInt64("1".PadRight(DecimalPlacesCount + 1, '0'));
long kajs = (long) (YourNumber * number);
这不是同一个数字,你对这个转换有什么标准?比如乘以100000。或者转换so字符串并删除十进制字符。例如:
long.Parse(-26.3999745).ToString().Replace(“.”,”“)
如果(我假设)-2.63999745
将转换为完全相同的长值,那么这种转换有什么意义。“截断”可能不会发生,但它肯定会丢失信息。我同意达米恩的观点。这似乎是荒谬的。1.0001、10.001、100.01、1000.1和10001都会产生相同的结果。这在什么方面有用?可能是巧合,但我想sameIt通常最好使用String.Empty
而不是”
@KamilT真的吗?这就是这种方法让你烦恼的地方?不是说“
应该是一个独立于区域性的十进制分隔符,或者整个东西都是无用的?我不喜欢使用字符串。空的
-它比”
IMO更难阅读。但是YMMV!如果是“-263999745”(取决于当前的文化背景),则它将不起作用
double YourNumber = -26.3999745;
int DecimalPlacesCount = BitConverter.GetBytes(decimal.GetBits(Convert.ToDecimal(YourNumber))[3])[2];
long number = Convert.ToInt64("1".PadRight(DecimalPlacesCount + 1, '0'));
long kajs = (long) (YourNumber * number);