# 小数
## 定点数
//文档上称,暂不支持
## 小数字面量
如果字面量计算的结果不是一个整数,那么将会转换为一个对应的`ufixed`,或`fixed`类型。`Solidity`会选择合适的大小,以能尽量包含小数部分。
例,在`var x = 1 / 4`中,`x`的实际类型是`ufixed0x8`。而在`var x = 1/ 3`中,类型会是`ufixedox256`,因为这个结果表示是无限的,所以他只能是无限接近。
## 支持的运算符
适用于整型的操作符,同时适用于数字的字面量运算表达式,当操作结果是整数时。如果有任何一方是有理数,将不允许使用位操作符。如果指数是小数,还将不能进行取幂运算。
## 数字字面量
Solidity对每一个有理数都有一个数值字面量类型。整数字面量和有理数字面量从属于数字面量。所有的数字字面表式的结果都属于数字字面类型。所以`1 + 2`和`2 + 1`都属于同样的有理数的数字字面类型`3`
## 二进制表示
大多数含小数的十进制,均不可被二进制准确表达,比如`5.3743`的类型可能是`ufixed8*248`。如果你想使用这样的值,需要明确指定精度`x + ufixed(5.3743)`,否则会报类型转换错误。
## 字面量截断
整数上的字面量除法,在早期的版本中是被截断的,但现在可以被转为有理数了,如`5 /2`的值为 `2.5`。
## 字面量转换
数字的字面量表达式,一旦其中含有非字面量表达式,它就会被转为一个非字面量类型。下面代码中表达式的结果将会被认为是一个有理数:
```
pragma solidity ^0.4.0;
contract IntegerLiteralConvert{
function literalTest(){
uint128 a = 1;
//uint128 b = 2.5 + a + 0.5;
//Error: Operator + not compatible with types rational_const 5/2 and uint128
}
}
```
虽然我们知道上述表达式运算的结果将是一个整型,但最终被编译器认为是小数型,所以上述代码编译不能通过。
- Solidity语言
- 入门说明
- Solidity智能合约文件结构
- 智能合约源文件的基本要素概览
- 值类型
- 类型
- 布尔
- 整型
- 地址
- 字节数组
- 小数
- 字符串
- 十六进制字面量
- 枚举
- 函数
- 引用类型
- 引用类型
- 数据位置
- 数组
- 数据结构
- 杂项
- 映射
- 左值运算符
- 类型间的转换
- 类型推断
- 单位
- 货币单位
- 时间单位
- 语言内置特性
- 特殊变量及函数
- 数学和加密函数
- 地址相关
- 进阶
- 入参和出参
- 控制结构
- 函数调用
- 创建合约实例
- 表达式的执行顺序
- 赋值
- 作用范围和声明
- 异常
- 内联汇编
- 合约详解
- 合约
- 可见性或权限控制
- 访问函数
- 函数修改器
- 常状态变量
- 回退函数
- 事件
- 继承
- 接口
- 其它
- 库
- 状态变量的存储模型
- 内存变量的存局
- 调用数据的布局