> function h2n($num) {return [int]$num.replace(",", "")}

> h2n("1,341,096") | get-member



   TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int IComparable.CompareTo(System.Object obj), int IComparable[int].Com... Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar      Method     char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime  Method     datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal   Method     decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble    Method     double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16     Method     int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32     Method     int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64     Method     long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte     Method     sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle    Method     float IConvertible.ToSingle(System.IFormatProvider provider)
ToString    Method     string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider), string ToString(string format, ... ToType      Method     System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
ToUInt16    Method     uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32    Method     uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64    Method     uint64 IConvertible.ToUInt64(System.IFormatProvider provider)


> h2n("1,341,096")  * 0
1341096

Mengapa ekspresi terakhir tidak mengembalikan 0?

0
IttayD 4 Maret 2020, 22:47

1 menjawab

Jawaban Terbaik

Kamu dapat masuk [int](h2n('1,341,096')) * 0 saat memanggil fungsi Anda.

Seperti yang disarankan oleh komentator di atas, Anda harus memasukkan (h2n '1.341.096') * 0.

Alasannya adalah karena di Powershell, Anda tidak memasukkan argumen fungsi dalam tanda kurung saat memanggil fungsi di shell. Sebagai gantinya, Anda menggunakan sintaks gaya terminal dan memisahkan argumen dengan spasi dan tanpa tanda kurung.

Jadi apa yang terjadi ketika Anda memasukkan h2n('1,341,096') * 0 ? Ia melakukan panggilan fungsi ini:

(h2n '1,341,096' * 0)

Itu baru saja melewati 3 parameter ke fungsi Anda, yang pertama adalah 1.341.096, yang kedua adalah *, dan yang ketiga adalah 0. Ini jelas bukan yang Anda inginkan.

Itu akan menjadi setara fungsional melakukan h2n('1,341,096', *, 0); dalam bahasa pemrograman normal.

Sebagai gantinya, Anda memanggil fungsi Anda dengan spasi seperti h2n '1,341,096' dan kemudian Anda mengelilinginya dengan tanda kurung sehingga Anda dapat menggunakannya dalam ekspresi sebaris.

1
Alex 4 Maret 2020, 22:31