Kar*_*ten 14 .net c# floating-point
我有一个浮点变量,只想得到逗号之后的部分,所以如果我有3.14.我想得到14作为整数.我怎样才能做到这一点?
Mic*_*ael 35
您可以从值本身中减去整数部分以检索小数部分.
float x = 3.14
float fractionalPortion = x - Math.Truncate(x);
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其相乘以获得以您想要的任何精度表示为整数的小数部分.
将小数部分映射到整数具有一些挑战 - 许多浮点数不能表示为基数为10的整数,因此可能需要比整数可以支持的更多数字来表示.
另外,3.1和3.01这样的数字是什么情况?直接映射到整数都会导致1.
尝试
float n = 3.14f;
int fractionalPart = new System.Version(n.ToString()).Minor;
Run Code Online (Sandbox Code Playgroud)
大卫的"作弊版"答案目前似乎并不是很受欢迎,但在一天中的大部分时间里,我找到了System.Version类.它有一个构造函数,它接受一个字符串.使用Reflector,我看到它通过将字符串拆分成数组来工作.我跑了一个测试得到任意数字1234567891.1234567891m的小数部分.使用1,000,000次迭代,它比我发布的其他答案快50%,尽管我首先必须为了Version构造函数将十进制数转换为字符串.所以大卫在使用字符串转换概念时遇到了一个糟糕的突破,这似乎是一个很好的方法.微软做到了.
欺骗的方式是:
private Int32 FractionalPart(double n)
{
string s = n.ToString("#.#########", System.Globalization.CultureInfo.InvariantCulture);
return Int32.Parse(s.Substring(s.IndexOf(".") + 1));
}
Run Code Online (Sandbox Code Playgroud)
edit2:好的确定OK.这是我能想到的最偏执的永不失败的版本.这将返回浮点数的小数部分的前9位(或更少,如果没有那么多).这保证不会溢出Int32.我们使用不变文化,因此我们知道我们可以使用句点作为小数分隔符.
| 归档时间: |
|
| 查看次数: |
29476 次 |
| 最近记录: |