Почему ежемесячная ставка показывает 0,01% при вводе 10? Я ожидал 0,1% 0r 0,10% - PullRequest
0 голосов
/ 09 февраля 2010
#loan calculator...just messing around for practice

cls

$choice = 0
while   ($choice -ne 1){
    [string]$name = read-host "Enter name"
    [double]$amount = read-host "Enter loan amount"
    [double]$apr = $(0.01 * (read-host "Enter APR"))
    [int]$term = read-host "Enter term in months"
    $rate = $apr/12
    $mr = $rate * [math]::pow((1+$rate),$term) / ([math]::pow((1+$rate),$term)-1) * $amount

    write-host "Customer: "$name
    write-host `t"Amount: $"$amount
    write-host `t"Monthly rate: "$("{0:N2}" -f $rate)"%"
    write-host `t"Number of payments: "$term
    write-host `t"Monthly payment: $"$("{0:N2}" -f $mr)
    write-host `t"Amount paid back: $"$("{0:N2}" -f $($mr*$term))
    write-host `t"Interest paid: $"$("{0:N2}" -f $($mr * $term - $amount))

    $choice = read-host "Press 1 to quit or anything else to start over"
}

Ответы [ 2 ]

1 голос
/ 09 февраля 2010

В дополнение к ответу paxdiablo, чтобы получить необработанное число, отображаемое в процентах в .NET, используйте спецификатор формата P, например ::

Write-Host "`tMonthly rate: $('{0:P2}' -f $rate)" 
1 голос
/ 09 февраля 2010

Если вы вводите APR как 10, оператор:

[double]$apr = $(0.01 * (read-host "Enter APR"))

установит его на 0,1. Затем вы делите это на 12, чтобы получить rate, который дает вам 0,008333 ... который при форматировании с {0:N2} даст 0.01.

Годовая процентная ставка 10% на самом деле составляет 0,83% в месяц, не 0,0083%, поэтому я не уверен, почему вы ставите символ "%" в конце после вы разделили его на 100. Попробуйте вместо этого:

write-host `t"Monthly rate: "$("{0:N2}" -f $rate*100)"%"

, что должно дать вам правильную цифру (при условии, что PowerShell по крайней мере немного интуитивно понятен).

Кроме того, я всегда использую 12% для начального тестирования, поскольку это значительно облегчает вычисления.

...