INCRBYFLOAT?

INCRBYFLOAT key increment

key 中所儲存的值加上浮點數增量 increment

如果 key 不存在,那么 INCRBYFLOAT 會先將 key 的值設為 0 ,再執行加法操作。

如果命令執行成功,那么 key 的值會被更新為(執行加法之后的)新值,并且新值會以字符串的形式返回給調用者。

無論是 key 的值,還是增量 increment ,都可以使用像 2.0e73e590e-2 那樣的指數符號(exponential notation)來表示,但是,執行 INCRBYFLOAT 命令之后的值總是以同樣的形式儲存,也即是,它們總是由一個數字,一個(可選的)小數點和一個任意位的小數部分組成(比如 3.1469.768 ,諸如此類),小數部分尾隨的 0 會被移除,如果有需要的話,還會將浮點數改為整數(比如 3.0 會被保存成 3 )。

除此之外,無論加法計算所得的浮點數的實際精度有多長, INCRBYFLOAT 的計算結果也最多只能表示小數點的后十七位。

當以下任意一個條件發生時,返回一個錯誤:

  • key 的值不是字符串類型(因為 Redis 中的數字和浮點數都以字符串的形式保存,所以它們都屬于字符串類型)
  • key 當前的值或者給定的增量 increment 不能解釋(parse)為雙精度浮點數(double precision floating point number)
可用版本:
>= 2.6.0
時間復雜度:
O(1)
返回值:
執行命令之后 key 的值。
# 值和增量都不是指數符號

redis> SET mykey 10.50
OK

redis> INCRBYFLOAT mykey 0.1
"10.6"


# 值和增量都是指數符號

redis> SET mykey 314e-2
OK

redis> GET mykey                # 用 SET 設置的值可以是指數符號
"314e-2"

redis> INCRBYFLOAT mykey 0      # 但執行 INCRBYFLOAT 之后格式會被改成非指數符號
"3.14"


# 可以對整數類型執行

redis> SET mykey 3
OK

redis> INCRBYFLOAT mykey 1.1
"4.1"


# 后跟的 0 會被移除

redis> SET mykey 3.0
OK

redis> GET mykey                                    # SET 設置的值小數部分可以是 0
"3.0"

redis> INCRBYFLOAT mykey 1.000000000000000000000    # 但 INCRBYFLOAT 會將無用的 0 忽略掉,有需要的話,將浮點變為整數
"4"

redis> GET mykey
"4"

討論 ?

comments powered by Disqus
四川快乐12开奖时间