質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Q&A

解決済

1回答

1673閲覧

【急ぎ】ExcelのPMT関数をObjective-cで書く

t134

総合スコア18

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

0グッド

1クリップ

投稿2015/04/20 10:07

=ROUND(-PMT(金利/100/12,返済回数,金額,0),-3)
返済回数は年数*12-7です。

Excelで上記の式をつかい出る結果と同じ結果になる式をobjective-cで書きたいです。
非常に困っています。どなたか教えていただけますか。
お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

海外のサイトですがpmtの処理が説明されていました。
こちらを説明通りに関数化し、簡単な動作確認を行いました。
objective-cは遥か昔に触れただけなのでC言語のコードです。

将来価値を入力したり、月末支払で無い場合の計算はできませんが、上記であれば満たすことができると思います。

…センシティブな計算なので、本当いうとこんなスクラッチでは不安が拭えませんが…
(エラー処理とか一切ありませんし。)
急ぎとのことなので情報を共有します。

lang

1#include <math.h> 2 3// rate 金利 4// number_of_payment 支払い回数 5// principal 元金 6double pmt(double rate, double number_of_payment, double principal) 7{ 8 return (rate/(1.0-pow(1.0+rate, -number_of_payment))) * -principal; 9}

投稿2015/04/20 11:26

編集2015/04/20 11:32
haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t134

2015/04/20 11:49

わざわざありがとうございます。 大変助かります。 早速実装してみます。
t134

2015/04/20 12:17

非常に申し訳ございません。 教えていただいた式で、 return (rate/(1.0-pow(1.0+rate, -number_of_payment))) * -principal; ここを、 return ( ( rate / -100 ) /(1.0-pow(1.0+rate, -number_of_payment))) * -principal; rateを100でわるとかなり近い数値になりました。 // rate 金利 = 2 // number_of_payment 支払い回数 = 53 // principal 元金 = 5,100,000 上記の数値で計算すると、 Excelで101,000 objective-cで10,2000 となりました。 なにか解決策を思いついたりしますでしょうか? もしよろしければお願い致します。
haru666

2015/04/20 13:03

すみません席を外していました。 引数の扱いはEXCELと同じ値です。 金利が2%の場合は 金利/100/12、2%の場合は0.02/12を設定してください。
haru666

2015/04/20 13:17

追記です round関数使用後の値を確認するのは控えた方がいいと思います 誤差がどの程度か確認できません 倍精度少数の計算になるので完全に同じとなるかどうかは判断しかねますが、誤差が出ても1円未満になると思います EXCELで以下の式を入力した結果は\-100,619で PMT(2/100/12, 53, 5100000) 以下のCの結果は -100619.090763 になっています。 printf("%lf\n", pmt(0.02/12, 53, 5100000));
t134

2015/04/21 02:10

すいません、昨晩お返事を送信したつもりでいました。 round関数付いていたの忘れてました... 100と12で割ると同じ数値になりました。 おかげさまで解決致しました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問