gpt4 book ai didi

iphone - ObjC 将 Float 的小数位格式化为字符串

转载 作者:行者123 更新时间:2023-12-03 20:46:56 24 4
gpt4 key购买 nike

如何将 float 格式化为字符串,以便如果用户输入具有 2 位或更少小数位的数字,则将其格式化为具有 2 位小数,但如果用户输入具有 2 位或更多小数位的 float 然后显示所有小数位。例如

4.1 => 4.10
1 => 1.00
1.358484 => 1.358484

因此,如果需要的话,格式设置为小数点后两位或更多。

希望我说得有道理。

最佳答案

尝试这样的事情。

BOOL requiresExtraPrecision (double num) {
double roundedToHundredth = round(num * 100.0) / 100.0;
double diff = num - roundedToHundredth;
if (diff < 0) diff = 0.0 - diff;
if (diff < 0.0000001) {
return NO;
} else {
return YES;
}
}

NSString *formatted (double num) {
if (requiresExtraPrecision(num)) {
return [NSString stringWithFormat:@"%F", num];
} else {
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setMaximumFractionDigits:2];
[formatter setMinimumFractionDigits:2];
return [formatter stringFromNumber:[NSNumber numberWithDouble:num]];
}
}

正如@Carl 在对该问题的评论中所写,困难的部分是决定 double 值何时需要其所有精度。在这段代码中,我假设如果 double “足够接近”四舍五入的数字(百万分之一以内),那么我们应该只显示四舍五入的数字。

您可能决定使其更严格(十亿分之一?),但您总是必须使用某种近似值,因为某些小数无法精确地存储为 float 。即使用户可能在输入时键入了“0.1”,当该数字存储为 float 时,该信息也会丢失。

因此,鉴于您将拥有一个非常接近小数但又不完全正确的 float ,您必须决定何时认为该 float “足够接近”小数。

如果您需要绝对精度(如果您正在使用金钱!),那么您应该考虑使用 NSDecimal 或 NSDecimalNumber 而不是 float 。

关于iphone - ObjC 将 Float 的小数位格式化为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5292823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com