NSString 转换 float 的精度问题, 换double类型可以解决

@"0.01" 转换成float时, 经常会变成  0.009999799 这种形式, 因为float类型无法精准保存, 系统会选一个接近的值来代替.

而double类型则可以有更好的精度.

http://stackoverflow.com/questions/9328260/converting-nsstring-to-float-adds-in-decimal-places

Your issue seems to be that you don‘t understand how floats are stored in memory and don‘t know that floats aren‘t precise.

Exact values often can‘t be stored and so the system picks the closest number it can to represent it. If you look carefully, you can see that each of the outputted numbers is very close to your inputted values.

For better accuracy, try using double instead. Double does encounter the same problems, but with better precision. Floats have about 6 significant digits; doubles have more than twice that.Source

Here are some other StackOverflow answers and external articles you should read:

时间: 2024-11-09 21:35:20

NSString 转换 float 的精度问题, 换double类型可以解决的相关文章

Java 浮点数 float或double类型的表示范围和精度

隐约记得,浮点数判断大小好像有陷阱,因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f //true 0.9f==1f //false 要明白这些,首先要搞清楚float和double在内存结构 1.内存结构 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) dou

float及double类型减法运算时精度丢失问题

当float和double类型在进行减法运算时,会出现精度丢失问题,这种问题主要是由于计算机中普遍使用2进制所造成的.在此做为记录,防止日后遗忘.     public static void main(String[] args) {         float a = 2.1f;         float b = 2.0f;         float c = a - b;         System.out.println("a-b=" + c);     }     //输

float和double类型的存储方式

Float double 类型在计算机的存储方式 计算机中只认识10的二进制数,那么该如何存储小数呢? 那么我们先看Floa类型: Float在计算机(32位)中是4个字节的,具体地:第一位为符号位0为正,1为负 第2到第9位为指数位,第10到32位为尾数位,具体地如下图所示: 1 2 9 10 32 现在我们举个例子: 8.25的二进制表示方法为:1000.01 =1.00001*23 ,指数为3,尾数为00001,那么它怎样在二进制中存储呢? 首先看符号位为正,所以第一位为0,指数为3,要加

impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)

impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)例如Query: select cast(round(2 / 3, 4)*100 as string)+---------------------------------------+| cast(round(2 / 3, 4) * 100 as string) |+---------------------------------------+| 66.670000000000002 |+-------

NSString 转换

NSString *tempA = @"123"; NSString *tempB = @"456"; 1,字符串拼接 NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB]; 2,字符转int int intString = [newString intValue]; 3,int转字符 NSString *stringInt = [NSString string

mysql float double 类型

1.float类型 float列类型默认长度查不到结果.必须指定精度. 比方 num float, insert into table (num) values (0.12); select * from table where num=0.12的话.empty set. num float(9,7), insert into table (num) values (0.12); select * from table where num=0.12的话会查到这条记录. mysql> create

C++中将string类型转换为int, float, double类型 主要通过以下几种方式:

# 方法一: 使用stringstream stringstream在int或float类型转换为string类型的方法中已经介绍过, 这里也能用作将string类型转换为常用的数值类型. Demo: [cpp] view plaincopy #include <iostream> #include <sstream>    //使用stringstream需要引入这个头文件 using namespace std; //模板函数:将string类型变量转换为常用的数值类型(此方法

java float跟double类型区别

单精度和双精度的取值范围和精度是不同的 单精度:float的精度是6位有效数字,取值范围是10的-38次方到10的38次方,float占用4字节空间 双精度:double的精度是15位有效数字,取值范围是10的-308次方到10的308次方,double占用8字节空间. 原文地址:https://www.cnblogs.com/mileSs/p/8386968.html

OpenMesh 将默认的 float 类型改为 double 类型

OpenMesh 中默认的数据类型都是 float 类型的,如果要将其默认的 float 类型改为 double 类型,可以这么做: #include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh> #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/Handles.hh> #include <OpenMesh/Core/Mesh/Trai