doubleをlongに切り詰めずにlongに変換するにはどうすればよいですか?例えば切り捨てずにdoubleをlongに変換する
、
私は-26.3999745は、これまでのところ、私は、そのような番号を切り捨てConvert.ToInt64()
として試みてきた方法-263999745
になりたいです。
EDIT:小数点以下の桁数が変化する 、数字の一部は、2つの段階に続いて小数点以下5桁
doubleをlongに切り詰めずにlongに変換するにはどうすればよいですか?例えば切り捨てずにdoubleをlongに変換する
、
私は-26.3999745は、これまでのところ、私は、そのような番号を切り捨てConvert.ToInt64()
として試みてきた方法-263999745
になりたいです。
EDIT:小数点以下の桁数が変化する 、数字の一部は、2つの段階に続いて小数点以下5桁
あなたは、これはあなたが本当に欲しいものは本当に確信している場合...
long.Parse((-26.3999745).ToString().Replace(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator.ToString(), string.Empty)))
偶然かもしれませんが、私は同じことを考えていました –
'' "の代わりに' 'String.Empty''を使うのが普通です。 –
@KamilT本当に? ** **このアプローチについては、**あなたを気にするものですか? ''。 ''は文化に依存しない小数点の区切りであるべきではないか、またはすべてが役に立たないということではありませんか? –
を有することができます
n
コード:
double number = -26.3999745;
int n = BitConverter.GetBytes(decimal.GetBits((decimal)number)[3])[2];
long result = (long)(number * Math.Pow(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を掛けるだけです。または、文字列を変換して小数点文字を削除します。 – HimBromBeere
例: 'long.Parse(( - 26.3999745).ToString()。Replace("。 "、" ")) –