我希望以整数形式接收小数点后面的数字。例如,从1.05或从2.50只有05 <50> 0.50
答案 0 :(得分:165)
最好的方法是:
var floatNumber = 12.5523;
var x = floatNumber - Math.Truncate(floatNumber);
结果你可以转换,但你喜欢
答案 1 :(得分:73)
var decPlaces = (int)(((decimal)number % 1) * 100);
这假设您的号码只有两位小数。
答案 2 :(得分:13)
没有舍入问题的解决方案:
double number = 10.20;
var first2DecimalPlaces = (int)(((decimal)number % 1) * 100);
Console.Write("{0:00}", first2DecimalPlaces);
输出: 20
请注意,如果我们没有强制转换为十进制,则会输出
19
。
此外:
318.40
输出:40
(而不是39
)47.612345
输出:61
(而不是612345
)3.01
输出:01
(而不是1
)如果您正在处理财务数据,例如,如果在这种情况下您尝试获取交易金额的美分部分,请始终使用
decimal
数据类型。
<强>更新强>
如果将其作为字符串处理(以@ SearchForKnowledge的答案为基础),以下内容也适用。
10.2d.ToString("0.00", CultureInfo.InvariantCulture).Split('.')[1]
然后,您可以使用Int32.Parse
将其转换为int。
答案 3 :(得分:11)
比“ Math.Truncate”方法更干净,方法更快:
double frac = value % 1;
答案 4 :(得分:9)
更好的方式 -
double value = 10.567;
int result = (int)((value - (int)value) * 100);
Console.WriteLine(result);
输出
56
答案 5 :(得分:8)
最简单的变体可能是Math.truncate()
double value = 1.761
double decPart = value - Math.truncate(value)
答案 6 :(得分:1)
int last2digits = num - (int) ((double) (num / 100) * 100);
答案 7 :(得分:0)
var result = number.ToString().Split(System.Globalization.NumberDecimalSeparator)[2]
将其作为字符串返回(但您始终可以将其强制转换为int),并假设该数字具有“。”。某处。
答案 8 :(得分:0)
在我的测试中,这比 Math.Truncate 答案慢 3-4 倍,但只有一个函数调用。也许有人喜欢它:
var float_number = 12.345;
var x = Math.IEEERemainder(float_number , 1)
答案 9 :(得分:0)
string input = "0.55";
var regex1 = new System.Text.RegularExpressions.Regex("(?<=[\\.])[0-9]+");
if (regex1.IsMatch(input))
{
string dp= regex1.Match(input ).Value;
}
答案 10 :(得分:0)
我想这个线程越来越老了,但我不敢相信没有人提到Math.Floor
//will always be .02 cents
(10.02m - System.Math.Floor(10.02m))
答案 11 :(得分:0)
那可能是开销,但应该可以。
x >> 64
答案 12 :(得分:0)
这是我为类似情况编写的扩展方法。我的申请将收到格式为2.3或3.11的数字,其中数字的整数分量代表年份,小数分量代表数月。
// Sample Usage
int years, months;
double test1 = 2.11;
test1.Split(out years, out months);
// years = 2 and months = 11
public static class DoubleExtensions
{
public static void Split(this double number, out int years, out int months)
{
years = Convert.ToInt32(Math.Truncate(number));
double tempMonths = Math.Round(number - years, 2);
while ((tempMonths - Math.Floor(tempMonths)) > 0 && tempMonths != 0) tempMonths *= 10;
months = Convert.ToInt32(tempMonths);
}
}
答案 13 :(得分:0)
public static string FractionPart(this double instance)
{
var result = string.Empty;
var ic = CultureInfo.InvariantCulture;
var splits = instance.ToString(ic).Split(new[] { ic.NumberFormat.NumberDecimalSeparator }, StringSplitOptions.RemoveEmptyEntries);
if (splits.Count() > 1)
{
result = splits[1];
}
return result;
}
答案 14 :(得分:-1)
您可以在将double转换为字符串之后使用.
函数从您尝试获取小数的双精度中删除点Remove()
,以便您可以执行所需的操作
考虑_Double
的价值加倍0.66781
,以下代码仅显示点.
后的数字66781
double _Double = 0.66781; //Declare a new double with a value of 0.66781
string _Decimals = _Double.ToString().Remove(0, _Double.ToString().IndexOf(".") + 1); //Remove everything starting with index 0 and ending at the index of ([the dot .] + 1)
另一种解决方案
您也可以使用类Path
,它以跨平台的方式对字符串实例执行操作
double _Double = 0.66781; //Declare a new double with a value of 0.66781
string Output = Path.GetExtension(D.ToString()).Replace(".",""); //Get (the dot and the content after the last dot available and replace the dot with nothing) as a new string object Output
//Do something
答案 15 :(得分:-2)
非常简单
float moveWater = Mathf.PingPong(theTime * speed, 100) * .015f;
int m = (int)(moveWater);
float decimalPart= moveWater -m ;
Debug.Log(decimalPart);
答案 16 :(得分:-2)
使用正则表达式:Regex.Match("\.(?\d+)")
如果我在这里错了,有人会纠正我
答案 17 :(得分:-3)
为什么不使用int y = value.Split('.')[1];
?
Split()
函数将值拆分为单独的内容,1
在.
答案 18 :(得分:-23)
更新了答案
我在这里给出了3种方法。
[1]数学解决方案使用Math.Truncate
var float_number = 12.345;
var result = float_number - Math.Truncate(float_number);
//输入:1.05
//输出:“0.050000000000000044”
//输入:10.2
//输出:0.19999999999999929
如果这不是您期望的结果,那么您必须将结果更改为您想要的表单(但您可能会再次执行一些字符串操作。)
[2]使用乘数[乘以N的幂为10(例如10²或10³),其中N是小数位数]
// multiplier is " 10 to the power of 'N'" where 'N' is the number
// of decimal places
int multiplier = 1000;
double double_value = 12.345;
int double_result = (int)((double_value - (int)double_value) * multiplier);
//输出345
如果小数位数没有固定,那么这种方法可能会产生问题。
[3]使用“正则表达式(REGEX)”
在用字符串编写解决方案时我们应该非常小心。除了某些情况, 不会更好 。
如果你要用小数位做一些 字符串操作,那么这将是更好的
string input_decimal_number = "1.50";
var regex = new System.Text.RegularExpressions.Regex("(?<=[\\.])[0-9]+");
if (regex.IsMatch(input_decimal_number))
{
string decimal_places = regex.Match(input_decimal_number).Value;
}
//输入:“1.05”
//输出:“05”
//输入:“2.50”
//输出:“50”
//输入:“0.0550”
//输出:“0550”