private void button_Click(object sender, EventArgs e)
{
// 除去する
Debug.WriteLine(truncate_trailing_zeros(1040000.00M)); // -> 1040000
Debug.WriteLine(truncate_trailing_zeros(1050000.00M)); // -> 1050000
Debug.WriteLine(truncate_trailing_zeros(10.0000400M)); // -> 10.00004
Debug.WriteLine(truncate_trailing_zeros(10.0000500M)); // -> 10.00005
// カウントする
Debug.WriteLine(count_trailing_zeros(0.4400M)); // -> 2
Debug.WriteLine(count_trailing_zeros(1.0000M)); // -> 4
Debug.WriteLine(count_trailing_zeros(1.0001M)); // -> 0
Debug.WriteLine(count_trailing_zeros(100.00M)); // -> 2
}
public static decimal truncate_trailing_zeros(decimal value)
{
return value / 1.0000000000000000000000000000M;
}
public static int count_trailing_zeros(decimal value)
{
return (decimal.GetBits(Math.Abs(value))[3] >> 16 & 0x0FF) - (decimal.GetBits(truncate_trailing_zeros(value))[3] >> 16 & 0x0FF);
/*var decimal_part = decimal.GetBits(Math.Abs(value))[3] >> 16 & 0x0FF;
var last = -1;
for (int i = 0; i <= decimal_part; i++)
{
var sample = (decimal)Math.Pow(10, -i) * (decimal)Math.Pow(10, i);
var current = decimal.GetBits(value / sample)[3] >> 16 & 0x0FF;
if(last == current)
{
return i - 1;
}
last = current;
}
return decimal_part;*/
}
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme