我有一个应用程序正在计算过滤器的值。这些值通常在 10^-9 值范围内。目前这个计算的值被发送到一个浮点数。有没有一种简单的方法可以强制这个数字以标准形式显示?即 x*10^-9 而不是长小数。问候
问问题
233 次
3 回答
3
你想要NSNumberFormatter
上课。具体来说,您要将numberStyle
属性设置为kCFNumberFormatterScientificStyle
. 就像是:
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
numFormatter.numberStyle = kCFNumberFormatterScientificStyle;
NSString *result = [numFormatter stringFromNumber:[NSNumber numberWithFloat:someFloat]];
于 2012-11-29T12:42:34.420 回答
2
有一个用于以标准格式准备字符串的修饰符:%g
和%G
:
这不会强制使用标准形式,但非常大和非常小的数字将采用标准形式而没有尾随零。看看我加粗的部分。
- %G
“double”参数以科学或标准格式输出。仅当转换产生的指数小于 -4 或大于精度时才使用科学计数法;否则使用标准表示。使用科学记数法,标记指数的“e”是小写的。精度是指所需的有效位数(不一定是小数位数)。从结果中删除尾随零,并且仅当小数点后跟数字时才会出现小数点。
- %G
与 "%g" 格式相同,只是在科学计数法中标记指数的 'E' 为大写。
于 2012-11-29T13:03:51.340 回答
0
float yourfloat = [insert here];
float display = yourfloat;
bool neg = false;
if (display < 0)
{
neg = true;
display *= -1;
}
int e = 0;
while (display < 1 && display > 0)
{
display *= 10;
e++;
}
if (e > 0)
NSLog(@"%f*10^-%d", display * (neg ? -1 : 1), e);
else
NSLog(@"%f", display * (neg ? -1 : 1));
当然,将 替换NSLog
为字符串,或者您需要输出。
于 2012-11-29T12:39:04.480 回答