0

これはこれに対するフォローアップの質問であり、私もこれを見まし。私の Python スクリプトは、実行のたびにデータを収集し、データを URL に送信します。URL には、小数点以下 2 桁までのデータ/値を表示する必要があります。以下に示すように、値を小数点以下 2 桁に丸めるようにスクリプトを変更しました。その後、すべての print ステートメントで、スクリプトが小数点以下 2 桁に丸められていることがわかります。urlencode の後でも、params をデコードすると、小数点以下 2 桁が表示されます。しかし、URL では、値はすべての小数点以下の桁数で表示されます。たとえば、1.0 ではなく、1.000342760436734 と表示されますが、値は 1.00 として表示され、それ以上では表示されません。

印刷出力を含むスクリプトのコードは次のとおりです。

//スクリプトによって収集されるデータ - 辞書のリスト。

y = [{'a': 80.0, 'b': 0.0786235, 'c': 10.0, 'd': 10.6742903}, {'a': 80.73246, 'b': 0.0, 'c':   
10.780323, 'd': 10.0}, {'a': 80.7239, 'b': 0.7823640, 'c': 10.0, 'd': 10.0}, {'a': 
80.7802313217234, 'b': 0.0, 'c': 10.0, 'd': 10.9762304}]

//小数点以下2桁を四捨五入するコード

class LessPrecise(float):
    def __repr__(self):
        return str(self)

def roundingVals_toTwoDeci(y):
    for d in y:
        for k, v in d.iteritems():
            v = LessPrecise(round(v, 2))
            print v
            d[k] = v

//Json.dumps

roundingVals_toTwoDeci(y)
j = json.dumps(y)
print j

//print j が与える

[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d": 0.0}, {"a":  
80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}] 

//URLエンコード

params = urllib.urlencode({'thekey': j}) 

//パラメータをデコードした後、取得します

thekey=[{"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 100.0, "b": 0.0, "c": 0.0, "d": 
0.0}, {"a": 80.0, "b": 0.0, "c": 10.0, "d": 10.0}, {"a": 90.0, "b": 0.0, "c": 0.0, "d": 10.0}]

//ここまでは順調ですね。ただし、URL には ではなく10.0、 が表示されます10.000436783313897。何が起こっているのか、それを修正する方法はわかりません。

次のように、値を文字列に直接変換した後でも、URL で同じ float 値を取得することに注意してください。

def roundingVals_toTwoDeci(y):
    for d in y:
        for k, v in d.iteritems():
            d[k] = str(round(v, 2))

        return

これにより、 print s=json.dumps() は {"a": "10.0", "b": "3.1", etc.} のような値を返しますが、URL では値は 10.856473985798743 です。

4

0 に答える 0