2

これは私を殺している !私はこれほど多くの問題を抱えたことはなく、ここで何が間違っているのかわかりません。

2.32 などの数値があり、それを使って計算したい場合、うまくいきません。最も単純な例:

$income = $commission; //Commission is 2.32, retrieved from XML
echo "income: $income<br>";
$income100 = $income*100;
echo "income100: $income100<br>";

私が得る結果は次のとおりです。

income: 2.32
income100: 200

10 進数を変更せずに数学で正確に使用するにはどうすればよいですか?

本当にありがとう!

4

4 に答える 4

5

$income基になる を取り除くには、次の方法で割り当てる必要がありますSimpleXMLElement

$income = (float) $commission;

そうしないとどうなるかの例

$x = simplexml_load_string("<a>2.4</a>");
echo $x * 100; // output:  200
于 2012-10-29T20:05:35.943 に答える
2

ティムが言ったように浮動小数点数を使用するだけでなく、浮動小数点数で算術演算を実行するときは必ずBC Math関数を使用してください。具体的にはbcmul() :

$income100 = bcmul($income, 100);

于 2012-10-29T20:05:21.220 に答える
0

最も簡単な解決策は、 floatval()で float にキャストすることだと思います

$income = floatval($comission)

残りのコードはそのままにしておくと、意図したとおりに動作するはずです。

于 2012-10-29T20:09:40.900 に答える
0

浮動小数点数の問題は、それらで 10 進数を表すことができないことです (a/b整数aおよびのように記述できる場合を除き、さらにおよびが 2 のべき乗であるb場合のみ)。abs(a) < pow(2,52)b

文字列関数を使用して整数値を取得する方がよい場合があります。

$tmp = explode(".",$commission);
$tmp = intval($tmp[0].str_pad(substr($tmp[1],0,2),2,"0"));

これにより、小数部分から整数部分が分割され、小数部分が 2 桁の長さになり、整数部分の末尾に押し付けられるため、元の数値に効果的に 100 が掛けられます。

于 2012-10-29T20:07:38.237 に答える