Pecahan dalam Batch

2

Mengapa kode berikut mengembalikan 0?

@echo off
set a=100
set /a a=%a%*(50/%a%)

echo %a%
pause

Saya berasumsi itu karena batch di beberapa titik mengevaluasi (50/100) sebagai 0,5 dan membulatkannya menjadi nol karena tidak dapat mempertahankan desimal sebelum mengevaluasi% a% *. Apakah saya salah, dan bagaimana saya mengatasi ini?

Lucas F
sumber

Jawaban:

1

Mengapa kode berikut mengembalikan 0?

File batch tidak mendukung matematika floating point. Untuk mengatasi batasan ini, Anda harus menggunakan bahasa skrip lain.

Powershell dan VBS adalah kemungkinan:


Matematika dalam file batch NT

Keterbatasan

Ada batasan parah dalam matematika batch: itu hanya bisa menangani bilangan bulat 32-bit.

...

Tidak ada solusi nyata yang memungkinkan matematika titik mengambang, kecuali menggunakan bahasa skrip lainnya. Satu-satunya pengecualian adalah jika Anda memiliki jumlah desimal yang terbatas dan tetap (mis. 2), maka Anda bisa mengalikan semuanya dengan 100. Untuk menampilkan pembatas desimal di hasil akhir, gabungkan pembagian ineger dengan 100, diikuti oleh desimal pembatas, diikuti oleh pembagian modulo oleh 100:

SET Whole = Result / 100
SET "Fraction = Result %% 100"
SET Result=%Whole%.%Fraction%

Ini mungkin melanggar batas 32-bit.

Secara umum, untuk matematika floating point saya akan merekomendasikan menggunakan bahasa scripting lainnya.

Sumber Matematika dalam file batch NT

DavidPostill
sumber