【发布时间】:2015-09-07 14:37:07
【问题描述】:
我要获取数字,.ToString() 转换总长度
1. 1.23456789 - > 1.23457
2. 12345.789 - > 12345.8
3. 123456789.1234 - > 1.235E8
4. 0.00001234 - > 1.23E-8
我想使用非常快速的解决方案,因为使用大文件。
这段代码可以部分解决这个问题,但是不起作用
int power = (int)Math.Log10(f) + 1;
f = f / (float)Math.Pow(10, power);
f = (float)Math.Round(f, 5);
f = f * (float)Math.Pow(10, power);
例如
f = 7.174593E+10
四舍五入后变成0.71746(对我来说很好)
当我将它乘以10^11 时,它变成7.17459948E+10
但我期待7.71746E+10
UPD。 结果我想得到字符串,而不是数字。
【问题讨论】:
-
听起来你需要更多地了解二进制浮点数的表示方式。举个简单的例子,0.1 不能完全表示为
float。您可能应该考虑您希望基础值是什么以及您希望如何在文本中表示它以进行显示等。 -
String.format("{f:0.00000}",f)有用吗? (可能需要为 0,00000,具体取决于区域设置)。 -
为什么需要这样的数字格式?您只想以任何形式输出结果(
String.Format将成为您的朋友),还是需要结果以进行进一步计算?
标签: c# string optimization rounding