# 小數
## 定點數
//文檔上稱,暫不支持
## 小數字面量
如果字面量計算的結果不是一個整數,那么將會轉換為一個對應的`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智能合約文件結構
- 智能合約源文件的基本要素概覽
- 值類型
- 類型
- 布爾
- 整型
- 地址
- 字節數組
- 小數
- 字符串
- 十六進制字面量
- 枚舉
- 函數
- 引用類型
- 引用類型
- 數據位置
- 數組
- 數據結構
- 雜項
- 映射
- 左值運算符
- 類型間的轉換
- 類型推斷
- 單位
- 貨幣單位
- 時間單位
- 語言內置特性
- 特殊變量及函數
- 數學和加密函數
- 地址相關
- 進階
- 入參和出參
- 控制結構
- 函數調用
- 創建合約實例
- 表達式的執行順序
- 賦值
- 作用范圍和聲明
- 異常
- 內聯匯編
- 合約詳解
- 合約
- 可見性或權限控制
- 訪問函數
- 函數修改器
- 常狀態變量
- 回退函數
- 事件
- 繼承
- 接口
- 其它
- 庫
- 狀態變量的存儲模型
- 內存變量的存局
- 調用數據的布局