C# 将double转换为long而不截断

C# 将double转换为long而不截断,c#,C#,如何将double转换为long而不截断它 比如说, 我希望-26.3999745变成-263999745 到目前为止,我尝试过的方法,如Convert.ToInt64()截断数字 编辑: 小数位数各不相同,如果您确实确定这是您真正想要的,则某些数字可能有5位小数 long.Parse((-26.3999745).ToString().Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToString()

如何将double转换为long而不截断它

比如说,

我希望-26.3999745变成-263999745

到目前为止,我尝试过的方法,如
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);