mat*_*rai 174
最好的方法是:
var floatNumber = 12.5523;
var x = floatNumber - Math.Truncate(floatNumber);
Run Code Online (Sandbox Code Playgroud)
结果你可以转换,但你喜欢
tme*_*ser 73
var decPlaces = (int)(((decimal)number % 1) * 100);
Run Code Online (Sandbox Code Playgroud)
这假设您的号码只有两位小数.
ora*_*rad 14
没有舍入问题的解决方案:
double number = 10.20;
var first2DecimalPlaces = (int)(((decimal)number % 1) * 100);
Console.Write("{0:00}", first2DecimalPlaces);
Run Code Online (Sandbox Code Playgroud)
输出: 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]
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用Int32.Parse它将其转换为int.
小智 14
与'Math.Truncate'方法相比,有一种更清洁,更快速的解决方案:
double frac = value % 1;
Run Code Online (Sandbox Code Playgroud)
小智 10
最简单的变体可能是Math.truncate()
double value = 1.761
double decPart = value - Math.truncate(value)
Run Code Online (Sandbox Code Playgroud)
更好的方法 -
double value = 10.567;
int result = (int)((value - (int)value) * 100);
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)
输出 -
56
Run Code Online (Sandbox Code Playgroud)