我正试图从这样的双重字符串中获取字符串:
double aDouble;
NSString* doubleString = [NSString stringWithFormat:@"%g", aDouble];
对于大多数数字,我得到了预期的结果,但是对于
10000.03
我明白了:
10000
作为我的字符串。有没有办法防止这种行为?我希望结果是一串
10000.03
答案 0 :(得分:3)
%g
可能会很棘手。请注意,%f
可以与double
值一起使用,您可以使用%.2f
限制小数点后的位数(将2
替换为您的任意位数要)。
%g
是一种格式说明符,可根据以下算法在%f
或%e
之间进行选择:
%e
格式说明符,则 X 为指数
%f
,精度 P - ( X + 1)%e
,精度 P - 1。#
标志,否则将从结果的小数部分删除任何尾随零,如果没有剩余小数部分,则删除小数点字符。在您的情况下,%g
未指定精度,因此 P = 6.当使用%e
转换10000.03时,得到1.000003e + 04,指数是4,因此 X = 4.因为 P > X > = -4,转换为样式%f
,精度 P - ( X + 1)= 6 - (4 + 1)= 1.但10000.03精度为1(小数点后一位)产生10000.0,没有实际的小数部分,因此%g
将10000.03格式化为10000.
答案 1 :(得分:1)
尝试%。2f而不是%g
浮点数和双数是我们希望在十进制中看到的数字的基数两个表示,就像没有办法准确地表示基数为十的数字1/3而有限数字位数有很多基数为10的数字这不能在基数2中精确表示。例如,0.1(1/10)不能在基数2中精确表示。