2017-10-03 16 views
0

私はPayPalの適応型支払いシステムをウェブサイトに統合していますが、小切手2小数点以下の桁数が四捨五入されていないとエラーが発生します失われたこれに対する解決策は何ですか?私は現在、金額を四捨五入していますが、小数点以下の金額をどのように得るかについての考えはありますか?paypalアダプティブ決済問題 - 小数点以下切り捨て

+0

ポイント?米国通貨の最小単位は1セント(0.01)で、1ドルの100分の1より小額*はありません。解決策は適切な丸めであり、分数セントは適切に切り上げられます。顧客に伝えることはできません。そのコストは$ 11.125 *です。 –

答えて

0

PayPalに送信する金額が通貨に対して適切に丸められていることを確認する必要があります。これは、米ドルの金額に最大2つのサブユニット(セント)があることを意味します。

適応有料ルビーの宝石を使用して、まだ問題が発生した場合:私は最近、ルビーの宝石とに走った

もう一つの問題は、金銭的価値のために悪い習慣である、彼らは代わりに小数の浮動小数点数を使用することです。浮動小数点は不正確です。 ...例えば、Rubyでは

2.20 - 2.01 = 0.1900000000000004

そのbuild_pay方法にPARAMに渡し、あなたはまだエラーを取得しているときに、適切量のサブユニットを設定している場合...

If the fractional amount is rounded for currency conversion, funds could be lost

この問題は、gemがfloatを使用している可能性があります。あなたのログにはこれが表示され、715.57という数字を使ってテストすることができます。その宝石は、の宝石に.to_fを使用しているため、715.57000000001というAPIに送信します。この問題を解決するには

、私の猿は、本質的に代わりにフロートのBigDecimalのようにそれをキャストし、私のアプリにこれを追加することによって、私のレールのアプリで自分のFloatクラスにパッチを当て:

module PayPal::SDK::Core 
    module API 
    module DataTypes 
     module SimpleTypes 
     class Float < ::Float 
      def self.new(float) 
      # Floats are inccurate. BigDecimal is better. 
      # Ruby example: 2.20 - 2.01 = 0.1900000000000004 
      # To support currencies with up to 4 subunits, we round(4) 
      BigDecimal.new(float.to_f.round(4).to_s) 
      end 
     end 
     end 
    end 
    end 
end 

を私config/initializers/paypal.rbに。これはもっとも洗練されたソリューションだとは言えませんが、うまくいきます。私は彼らのレポにも問題を作りました、そしてうまくいきなり聞くことができます。

通貨とのフロート問題に関するさらに詳しい情報:

は参考1:https://stackoverflow.com/a/3730040/1109211

参考2:あなたはそれを使用していることは、小数点の右側に二つ以上の数字を使用していますどのような通貨https://stackoverflow.com/a/3730249/1109211

関連する問題